Bug #10879 Updated: odbc_prepare causes bus error
| From: | kalowsky@php.net | 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