Edit report at https://bugs.php.net/bug.php?id=63258&edit=1

 ID:                 63258
 Updated by:         larue...@php.net
 Reported by:        paul dot visco at roswellpark dot org
 Summary:            seg fault with PDO and dblib using DBSETOPT(H->link,
                     DBQUOTEDIDENT, 1);
 Status:             Open
 Type:               Bug
 Package:            PDO related
 Operating System:   centos 5.8
 PHP Version:        5.4.7
-Assigned To:        
+Assigned To:        ssufficool
 Block user comment: N
 Private report:     N

 New Comment:

according to MSDN, the fix should be:

diff --git a/ext/pdo_dblib/dblib_driver.c b/ext/pdo_dblib/dblib_driver.c
index 77832f9..baf1dcc 100644
--- a/ext/pdo_dblib/dblib_driver.c
+++ b/ext/pdo_dblib/dblib_driver.c
@@ -315,7 +315,7 @@ static int pdo_dblib_handle_factory(pdo_dbh_t *dbh, zval 
*driver_options TSRMLS_
        DBSETOPT(H->link, DBTEXTSIZE, "2147483647");
 
        /* allow double quoted indentifiers */
-       DBSETOPT(H->link, DBQUOTEDIDENT, 1);
+       DBSETOPT(H->link, DBQUOTEDIDENT, NULL);
 

see: http://msdn.microsoft.com/en-us/library/aa937147(v=sql.80).aspx

"
Note  When you use DBQUOTEDIDENT, you must set param to NULL.
"


Previous Comments:
------------------------------------------------------------------------
[2012-10-10 22:25:17] paul dot visco at roswellpark dot org

Description:
------------
revision #300716 to php source for /ext/pdo_dblib/ which adds support for 
double quoted field values causes segfault on our system.  According to 
https://bugs.php.net/bug.php?id=47588 line 318 was added to support quoted 
field names.   If pdo_dblib is recompiled without line 318 it works fine, no 
segfault. My patch is just commenting out the line, which is really not a 
solution but it allows us to be able to use the driver again.

PHP: 5.4.7
SYSTEM: CentOS 5.8
TSQL:
Version: freetds v0.91
freetds.conf directory: /etc
MS db-lib source compatibility: yes
Sybase binary compatibility: yes
Thread safety: yes
iconv library: yes
TDS version: 4.2
iODBC: no
unixodbc: yes
SSPI "trusted" logins: no
Kerberos: yes

Test script:
---------------
$db = new PDO('dblib:host=somehost.somesite.org;charset=UTF-8;','username',
'password');


Expected result:
----------------
Segmentation fault

Actual result:
--------------
Program received signal SIGSEGV, Segmentation fault.
0x00000036b68788e0 in strlen () from /lib64/libc.so.6
(gdb) bt
#0  0x00000036b68788e0 in strlen () from /lib64/libc.so.6
#1  0x00000036b6846e77 in vfprintf () from /lib64/libc.so.6
#2  0x00000036b68e74a7 in __vfprintf_chk () from /lib64/libc.so.6
#3  0x00002aaab1e6ece5 in ?? () from /usr/lib64/libsybdb.so.5
#4  0x00002aaab1e43dd8 in dbsetopt () from /usr/lib64/libsybdb.so.5
#5  0x00002aaab2e51447 in pdo_dblib_handle_factory (dbh=0x2aaaaab0c298, 
driver_options=<value optimized out>)
    at /home/visco/php-5.4.7/ext/pdo_dblib_orig/dblib_driver.c:318
#6  0x00002aaab2c40099 in zim_PDO_dbh_constructor (ht=<value optimized out>, 
return_value=<value optimized out>, 
    return_value_ptr=<value optimized out>, this_ptr=0x2aaaaab0a8f0, 
return_value_used=<value optimized out>)
    at /home/visco/php-5.4.7/ext/pdo/pdo_dbh.c:380
#7  0x00002aaaae23df42 in xdebug_execute_internal 
(current_execute_data=0x2aaaaaad5060, return_value_used=0)
    at /tmp/tmpBeyREt/xdebug-2.2.1/xdebug.c:1483
#8  0x00000000006008e7 in ?? ()
#9  0x000000000060680e in execute ()
#10 0x00002aaaae24061f in xdebug_execute (op_array=0x2aaaaab0b160) at 
/tmp/tmpBeyREt/xdebug-2.2.1/xdebug.c:1391
#11 0x00000000005d1dbe in zend_execute_scripts ()
#12 0x00000000005770d8 in php_execute_script ()
#13 0x00000000006789cd in ?? ()
#14 0x000000000067934d in ?? ()
#15 0x00000036b681d994 in __libc_start_main () from /lib64/libc.so.6
#16 0x00000000004239c9 in _start ()



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=63258&edit=1

Reply via email to