|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2011-02-13 16:23 UTC] ken at focusschoolsoftware dot com
Description:
------------
This bug happens in many of the odbc functions that handle results from a query,
but I'll point out one example:
The default case in php_odbc.c:
default:
if (result->values[field_ind].vallen == SQL_NULL_DATA) {
RETURN_NULL();
} else {
RETURN_STRINGL(result->values[field_ind].value, result-
>values[field_ind].vallen, 1);
}
break;
result->values[field_ind].vallen seems to be corrupted when fetching NULL data
on a 64-bit system. Since it does not equal
SQL_NULL_DATA, the else clause is executed causing a seg fault because it is
trying to handle a NULL case.
Test script:
---------------
I have no test script to show, because the only as400/db2 server I have access to is behind a VPN at the moemnt.
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Nov 09 14:00:01 2025 UTC |
Backtrace: #0 0x00007ffff6879ea1 in memcpy () from /lib/libc.so.6 #1 0x00000000006af648 in _estrndup (s=0x7ffff57cd4b8 "", length=<value optimized out>) at /usr/include/bits/string3.h:52 #2 0x00007ffff5edadcb in zif_odbc_result (ht=<value optimized out>, return_value=0x7ffff57d6940, return_value_ptr=<value optimized out>, this_ptr=<value optimized out>, return_value_used=<value optimized out>, tsrm_ls=0xc91090) at /home/focus/Development/php-5.3.5/ext/odbc/php_odbc.c:2158 #3 0x000000000072730d in zend_do_fcall_common_helper_SPEC ( execute_data=0x7ffff7ed39a0, tsrm_ls=0xc91090) at /home/focus/Development/php-5.3.5/Zend/zend_vm_execute.h:316 #4 0x00000000006f927b in execute (op_array=0xeeb010, tsrm_ls=0xc91090) at /home/focus/Development/php-5.3.5/Zend/zend_vm_execute.h:107 #5 0x00000000006cec48 in zend_execute_scripts (type=<value optimized out>, tsrm_ls=0xc91090, retval=<value optimized out>, file_count=3) at /home/focus/Development/php-5.3.5/Zend/zend.c:1194 #6 0x0000000000670e2d in php_execute_script ( primary_file=<value optimized out>, tsrm_ls=<value optimized out>) at /home/focus/Development/php-5.3.5/main/main.c:2265 #7 0x0000000000767abe in main (argc=<value optimized out>, argv=<value optimized out>) at /home/focus/Development/php-5.3.5/sapi/cli/php_cli.c:1193I've the same problem. I'm trying to migrate my web applications from an old Ubuntu server 64bit with PHP 5.2.4 and DB2 9.1.0 to a new Ubuntu 10.4 LTS 64 bit server with PHP Version 5.3.2-1ubuntu4.10, Apache/2.2.14 and DB2 ver. 9.7.4. This is a sample of code: $sql = "SELECT field FROM table WHERE ..."; $result = odbc_exec($id_connect, $sql); if (odbc_fetch_row($result)) { $field = (int) odbc_result($result,"field"); // seg fault when field is null } But if I try this: $sql = "SELECT field FROM table WHERE ..."; $result = odbc_exec($id_connect, $sql); odbc_result_all($result); it don't crash but give: <table><tr><th>FIELD</th></tr> <tr><td>vÖN ’\UJõÕseõº\ŠŒ+ŽT9</td></tr></table> It seems that when field is null the ODBC driver return the pointer of somewhere in the memory...