|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull Requests
Pull requests:
HistoryAllCommentsChangesGit/SVN commits
[2020-09-28 15:07 UTC] cmb@php.net
-Status: Open
+Status: Verified
-Assigned To:
+Assigned To: cmb
[2020-09-28 15:12 UTC] cmb@php.net
[2020-09-28 21:00 UTC] cmb@php.net
[2020-09-28 21:00 UTC] cmb@php.net
-Status: Verified
+Status: Closed
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 07:00:01 2025 UTC |
Description: ------------ If SQLSetStmtAttr fails in odbc_handle_preparer (file odbc_driver.c), pdo_odbc_stmt_error is called. At this time, stmt->driver_data is still NULL. pdo_odbc_error then tries to store the error data to einfo of the not present stmt->driver_data => SIGSEGV. Second issue is, that caller of odbc_handle_preparer expects the error in the error structure of the db connection handle. Possible fix: --- ext/pdo_odbc/odbc_driver.c.orig 2014-06-17 18:18:14.529836822 +0200 +++ ext/pdo_odbc/odbc_driver.c 2014-06-17 18:41:55.907685218 +0200 @@ -67,7 +67,7 @@ pdo_odbc_stmt *S = NULL; pdo_error_type *pdo_err = &dbh->error_code; - if (stmt) { + if (stmt && stmt->driver_data) { S = (pdo_odbc_stmt*)stmt->driver_data; einfo = &S->einfo; @@ -185,7 +185,7 @@ if (cursor_type != PDO_CURSOR_FWDONLY) { rc = SQLSetStmtAttr(S->stmt, SQL_ATTR_CURSOR_SCROLLABLE, (void*)SQL_SCROLLABLE, 0); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - pdo_odbc_stmt_error("SQLSetStmtAttr: SQL_ATTR_CURSOR_SCROLLABLE"); + pdo_odbc_error(stmt->dbh, stmt, S->stmt, "SQLSetStmtAttr: SQL_ATTR_CURSOR_SCROLLABLE", __FILE__, __LINE__ TSRMLS_CC); SQLFreeHandle(SQL_HANDLE_STMT, S->stmt); if (nsql) { efree(nsql);