Bug #10879 Updated: odbc_prepare causes bus error

From: Date: Thu, 21 Jun 2001 15:17:49 +0000
Subject: Bug #10879 Updated: odbc_prepare causes bus error
Groups: php.dev 
Request: Send a blank email to php-dev+get-57544@lists.php.net to get a copy of this message
ID: 10879 Updated by: kalowsky Reported By: ville.alkkiomaki@sonera.com Old-Status: Open Status: Closed Bug Type: ODBC related Operating system: PHP Version: 4.0.5 Assigned To: Comments: that would be a bug in Solid I believe (re: short int). you might wish to contact them and inquire about it. marking this as closed as it follows the ODBC spec. Previous Comments: --------------------------------------------------------------------------- [2001-06-04 06:39:52] ville.alkkiomaki@sonera.com Well.. using short int as a parameter for SQLNumParams() causes bus error and using int (or long) does not. Include files supplied with the Solid SDK also defines that this parameter should be short int, but the library itself seems to handle it as an int. Have I missed something or is this Solid's bug.. (?!) Anyway, with these two workarounds the Apache 1.3.19/mod_ssl 2.8.3/OpenSSL 0.9.6a/PHP 4.0.5/Solid SDK 3.50 combination seems to work correctly.. --------------------------------------------------------------------------- [2001-05-31 11:45:24] kalowsky@php.net actually the change in the source (which I thought made it into 4.0.5) was: from: #ifndef HAVE_DBMAKER if ((*pv_onoff)) { #else if (pv_onoff && (*pv_onoff)) { #endif to: if (pv_onoff && (*pv_onoff)) { the SQLSMALLINT and the SWORD are defined to be the same in Solid 3.5 (both are short ints). --------------------------------------------------------------------------- [2001-05-31 06:38:48] ville.alkkiomaki@sonera.com Got little further, now commit is causing segmentation faults.. :) However changing line 2423 from ext/odbc/php_odbc.c from: #ifndef HAVE_DBMAKER if ((*pv_onoff)) { #else if (pv_onoff && (*pv_onoff)) { #endif to: #if !defined(HAVE_DBMAKER) && !defined(HAVE_SOLID) && !defined(HAVE_SOLID_30) &&!defined(HAVE_SOLID_35) if ((*pv_onoff)) { #else if (pv_onoff && (*pv_onoff)) { #endif ..seems to fix problems this time... --------------------------------------------------------------------------- [2001-05-31 02:30:25] ville.alkkiomaki@sonera.com Solidtech support have been contacted and they have provided new libraries for us (3.51.0154). Unfortunately this does not fix the problem. I also tried this with Solaris 7/Forte 6 compiler/php 4.0.5/solid SDK 3.51.0154 combination. Result is the same. After some debugging & core dumping I found out that casting odbc_result->numparams to long (instead of SWORD) fixes these problems. (line 270 on ext/odbc/php_odbc.h) According to the odbc specifications, second parameter for SQLNumParams() should be SQLSMALLINT. This is redefined as SWORD within the php_odbc.h (I wonder why), but removing this define does not fix the problem. It seems that even when Solid gets correct sized parameters it still writes beyond them and thus cause these bus errors. --------------------------------------------------------------------------- [2001-05-29 22:45:57] kalowsky@php.net Before we continue down this path please ensure you have the latest libraries from SolidTech. A bunch were distributed and did not contain any of the important parts built in. Contact solidtech support for more information (they are not available on the Web site). Once you're sure of this and it still happens... tell us more! --------------------------------------------------------------------------- The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online. ATTENTION! Do NOT reply to this email! To reply, use the web interface found at http://bugs.php.net/?id=10879&edit=2

« previous php.dev (#57544) next »