Bug #7246 Updated: Using Sybase function(s) makes php to crash
| From: | toren at exense dot com | Date: | Wed, 23 May 2001 07:42:03 +0000 |
| Subject: | Bug #7246 Updated: Using Sybase function(s) makes php to crash | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-56447@lists.php.net to get a copy of this message | ||
ID: 7246
User Update by: toren@exense.com
Status: Open
Bug Type: Sybase-ct (ctlib) related
Operating system: Win32
PHP Version: 4.0.3pl1-4.0.5
Description: Using Sybase function(s) makes php to crash
It seems like the declaration of the "_client_message_handler" (line 201) and the
"_server_message_handler" (line 227) in "ext/sybase_ct/sybase_ct.c" are wrong.
According to the sybase sample code, found in "/sybase..../sample/exutils.h" they
are supposed to be declared not only as CS_RETCOD, but also as CS_PUBLIC.
This has also been mention by fabien@usa.net in bug report http://bugs.php.net/?id=8836
Which would make the statement on line 201 look like
extern CS_RETCODE CS_PUBLIC _client_message_handler(CS_CONTEXT *context, CS_CONNECTION
*connection, CS_CLIENTMSG *errmsg)
instead of
static CS_RETCODE _client_message_handler(CS_CONTEXT *context, CS_CONNECTION *connection,
CS_CLIENTMSG *errmsg)
and the statement on line 227 should look like
extern CS_RETCODE CS_PUBLIC _server_message_handler(CS_CONTEXT *context, CS_CONNECTION
*connection, CS_SERVERMSG *srvmsg)
instead of
static CS_RETCODE _server_message_handler(CS_CONTEXT *context, CS_CONNECTION *connection,
CS_SERVERMSG *srvmsg)
I have tested this change on Windows NT/2000 and SuSE Linux without experiencing any problems.
Without the change php gives a memory fault on Windows NT/2000 after sybase_(p)connect if you are
using llibct.dll version 11.x.x. If you are using libct.dll version 10.04 it works ok, but this is a
version sybase
is about to stop supporting.
TEN
Previous Comments:
---------------------------------------------------------------------------
[2000-10-16 11:13:09] toren@exense.com
This script makes php crash, and it has been like this since version 4.0b4. I never tested it on
version 3.
<?php
$db = sybase_pconnect("myserv", "myusr", "") ;
sybase_select_db("mydb",$db);
$result = sybase_query("SELECT col1, col2,..... FROM mytab",$db);
echo "<table border=1>n";
echo "<tr><td>Code</td><td>Name</td>n";
while ($myrow = sybase_fetch_row($result)) {
printf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>n",
$myrow[0],
$myrow[1], $myrow[2]);
}
sybase_close($db);
?>
If you run the php.exe you will get an exeption handle in the executable when sybase returnes, and
if you run it as a moudle on Apache you just get a blank page.
If you set the min message level to 10 you will get the db message which says "changed db
to....." before php dies.
My php.ini is the standard one with the php_sybase_ct.dll enabled.
---------------------------------------------------------------------------
Full Bug description available at: http://bugs.php.net/?id=7246