ID: 7246
User Update by: [EMAIL PROTECTED]
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 [EMAIL PROTECTED] 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] [EMAIL PROTECTED]
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


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to