Bug #53551 [Asn->Csd]: PDOStatement execute segfaults for pdo_mysql driver
| From: | uw@php.net | Date: | Mon, 31 Jan 2011 09:25:05 +0000 |
| Subject: | Bug #53551 [Asn->Csd]: PDOStatement execute segfaults for pdo_mysql driver | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-158351@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=53551&edit=1
ID: 53551
Updated by: uw@php.net
Reported by: eddawley at gmail dot com
Summary: PDOStatement execute segfaults for pdo_mysql driver
-Status: Assigned
+Status: Closed
Type: Bug
Package: PDO related
Operating System: Centos 5
PHP Version: 5.3.4
Assigned To: mysql
Block user comment: N
Private report: N
New Comment:
See SVN note
Previous Comments:
------------------------------------------------------------------------
[2011-01-14 15:57:59] johannes@php.net
Automatic comment from SVN on behalf of johannes
Revision: http://svn.php.net/viewvc/?view=revision&revision=307478
Log: - Fix #53551 (PDOStatement execute segfaults for pdo_mysql driver)
------------------------------------------------------------------------
[2011-01-06 12:03:48] uw@php.net
That fix should do it, however, I'd like to wait until Johannes returns
from vacation and reviews it. PDO is a bit of a beast. With the fix the
code should neither crash nor leak, nor behave differently from
PDO_SQlite. Anyway, the result is still pretty, well, PDOish weird:
error codes not cleaned up properly upon rebinding. Not my cup of
coffee...
Index: ext/pdo_mysql/mysql_statement.c
===================================================================
--- ext/pdo_mysql/mysql_statement.c (Revision 307155)
+++ ext/pdo_mysql/mysql_statement.c (Arbeitskopie)
@@ -141,10 +141,12 @@
/* (re)bind the parameters */
if (mysql_stmt_bind_param(S->stmt, S->params) ||
mysql_stmt_execute(S->stmt)) {
+ /*
if (S->params) {
efree(S->params);
S->params = 0;
}
+ */
pdo_mysql_error_stmt(stmt);
if (mysql_stmt_errno(S->stmt) == 2057) {
/* CR_NEW_STMT_METADATA makes the statement
unusable */
------------------------------------------------------------------------
[2010-12-17 20:58:27] eddawley at gmail dot com
Sorry, I didn't realize I was being unclear. The segfault is occurring
with PDO
using libmysql.
Here are my relevant configure options:
'--with-mysql=mysqlnd' '--with-mysqli' '--with-pdo-mysql'
------------------------------------------------------------------------
[2010-12-17 20:44:00] kalle@php.net
MySQLnd is not a driver, its a library backend. MySQL, MySQLi and
PDO_MySQL can all be powered by either libmysql or mysqlnd.
So what you are saying is that you built pdo_mysql against libmysql
which segfaults?
------------------------------------------------------------------------
[2010-12-17 19:38:02] eddawley at gmail dot com
I would like to add that this happens for other mysql-level errors. For
example, the following will also cause a segfault when reused:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or
update a
child
row: a foreign key constraint fails ...
SQLSTATE[22003]: Numeric value out of range: 1264 Out of range value for
column...
And again, this was noticed with the pdo_mysql driver. NOT the mysqlnd
native
driver.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/bug.php?id=53551
--
Edit this bug report at http://bugs.php.net/bug.php?id=53551&edit=1