PHP 4.0 Bug #7651 Updated: Uninitialised charset during sybase_connect
| From: | rasmus@php.net | Date: | Mon, 06 Nov 2000 01:08:49 +0000 |
| Subject: | PHP 4.0 Bug #7651 Updated: Uninitialised charset during sybase_connect | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-37215@lists.php.net to get a copy of this message | ||
ID: 7651
Updated by: rasmus
Reported By: james.cameron@compaq.com
Status: Closed
Bug Type: Sybase (dblib) related
Assigned To:
Comments:
Fixed
Previous Comments:
---------------------------------------------------------------------------
[2000-11-05 20:01:07] james.cameron@compaq.com
Ooops. I see my patch has been wrapped and the tabs have been stuffed up ... so here is a uuencoded
non-context diff relative to 4.0.3pl1.
begin 664 php_sybase_db.c.diff
M,C8T8S(V-
H(D)"6AO<W0]=7-E<CUP87-S=V0]3E5,3#L*+2TM"CX@"0D)
M:&]S=#UU<V5R/7!A<W-W9#UC:&%R<V5T/4Y53$P["C(W-V,R-S<*/"`)"0D)
M=7-E<CUP87-S=V0]3E5,3#L*+2TM"CX@"0D)"75S97(]<&%S<W=D/6-H87)S
M970]3E5,3#L*,CDS8S(Y,PH(`D)"0EP87-S=V0]3E5,3#L*+2TM"CX@"0D)
M"7!A<W-W9#UC:&%R<V5T/4Y53$P["C,Q,&$S,3$*/B`)"0D)8VAA<G-E=#U.
%54Q,.PH`
`
end
---------------------------------------------------------------------------
[2000-11-05 19:47:43] james.cameron@compaq.com
Problem: segmentation fault. php_sybase_do_connect() is sending an uninitialised charset pointer to
DBLSETLCHARSET.
Patch included in this bug report.
(gdb) bt
#0 0x400f40f6 in strncpy () from /lib/libc.so.6
#1 0x40027771 in tds_set_charset (tds_login=0x81496b8,
charset=0x1 <Address 0x1 out of bounds>) at login.c:85
#2 0x4002056b in DBSETLCHARSET (login=0x8185788,
charset=0x1 <Address 0x1 out of bounds>) at dblib.c:399
#3 0x809f6f3 in php_sybase_do_connect (ht=3, return_value=0x81a5a5c,
this_ptr=0x0, return_value_used=1, persistent=0) at php_sybase_db.c:354
#4 0x809fb78 in php_if_sybase_connect (ht=3, return_value=0x81a5a5c,
this_ptr=0x0, return_value_used=1) at php_sybase_db.c:512
#5 0x80da52f in execute (op_array=0x8176cd8) at ./zend_execute.c:1519
#6 0x80da72d in execute (op_array=0x817e208) at ./zend_execute.c:1559
#7 0x80da72d in execute (op_array=0x817e5e8) at ./zend_execute.c:1559
#8 0x80da72d in execute (op_array=0x8148224) at ./zend_execute.c:1559
#9 0x80b5b6b in zend_execute_scripts (type=8, file_count=3) at zend.c:717
#10 0x805c20c in php_execute_script (primary_file=0xbffffc88) at main.c:1200
#11 0x805a9ac in main (argc=2, argv=0xbffffd04) at cgi_main.c:715
*** ext/sybase/php_sybase_db.c.orig Mon Sep 4 04:43:09 2000
--- ext/sybase/php_sybase_db.c Mon Nov 6 11:38:30 2000
***************
*** 261,267 ****
switch(ZEND_NUM_ARGS()) {
case 0: /* defaults */
! host=user=passwd=NULL;
hashed_details_length=6+3;
hashed_details = (char *) emalloc(hashed_details_length+1);
strcpy(hashed_details,"sybase___");
--- 261,267 ----
switch(ZEND_NUM_ARGS()) {
case 0: /* defaults */
! host=user=passwd=charset=NULL;
hashed_details_length=6+3;
hashed_details = (char *) emalloc(hashed_details_length+1);
strcpy(hashed_details,"sybase___");
***************
*** 274,280 ****
}
convert_to_string(yyhost);
host = yyhost->value.str.val;
! user=passwd=NULL;
hashed_details_length = yyhost->value.str.len+6+3;
hashed_details = (char *) emalloc(hashed_details_length+1);
sprintf(hashed_details,"sybase_%s__",yyhost->value.str.val);
--- 274,280 ----
}
convert_to_string(yyhost);
host = yyhost->value.str.val;
! user=passwd=charset=NULL;
hashed_details_length = yyhost->value.str.len+6+3;
hashed_details = (char *) emalloc(hashed_details_length+1);
sprintf(hashed_details,"sybase_%s__",yyhost->value.str.val);
***************
*** 290,296 ****
convert_to_string(yyuser);
host = yyhost->value.str.val;
user = yyuser->value.str.val;
! passwd=NULL;
hashed_details_length =
yyhost->value.str.len+yyuser->value.str.len+6+3;
hashed_details = (char *) emalloc(hashed_details_length+1);
sprintf(hashed_details,"sybase_%s_%s_",yyhost->value.str.val,yyuser->value.str.val);
--- 290,296 ----
convert_to_string(yyuser);
host = yyhost->value.str.val;
user = yyuser->value.str.val;
! passwd=charset=NULL;
hashed_details_length =
yyhost->value.str.len+yyuser->value.str.len+6+3;
hashed_details = (char *) emalloc(hashed_details_length+1);
sprintf(hashed_details,"sybase_%s_%s_",yyhost->value.str.val,yyuser->value.str.val);
***************
*** 308,313 ****
--- 308,314 ----
host = yyhost->value.str.val;
user = yyuser->value.str.val;
passwd = yypasswd->value.str.val;
+ charset=NULL;
hashed_details_length =
yyhost->value.str.len+yyuser->value.str.len+yypasswd->value.str.len+6+3;
hashed_details = (char *) emalloc(hashed_details_length+1);
sprintf(hashed_details,"sybase_%s_%s_%s",yyhost->value.str.val,yyuser->value.str.val,yypasswd->va
lue.str.val); /* SAFE */
---------------------------------------------------------------------------
Full Bug description available at: http://bugs.php.net/?id=7651