Zeev:
I just finished coding up a patch to sybase-ct to add charset
support. I want to put it through a little more testing before I apply
it, but in the process, I found what appears to be a bug in the db
extension, and you seemed like the right person to talk to.
It all comes from "hashed_details_length". If they specify a charset,
then hashed_details_length will be one byte too short...there is no
space allocated for the _ seperator in the hashed_details.
So I followed what seemed to be the conventional wisdom, and added one
byte to all cases, and added an extra _ at the end of cases 1-3.
Is this the correct way to do this? Was this even a bug, or are we
safe anyways?
I attached the patch so you could take a look at it.
Index: ext/sybase/php_sybase_db.c
===================================================================
RCS file: /repository/php4/ext/sybase/php_sybase_db.c,v
retrieving revision 1.16
diff -u -r1.16 php_sybase_db.c
--- ext/sybase/php_sybase_db.c 12 Jun 2001 05:28:40 -0000 1.16
+++ ext/sybase/php_sybase_db.c 26 Jun 2001 12:39:08 -0000
@@ -282,9 +282,9 @@
}
convert_to_string(yyhost);
host = yyhost->value.str.val;
- hashed_details_length = yyhost->value.str.len+6+3;
+ hashed_details_length = yyhost->value.str.len+6+4;
hashed_details = (char *)
emalloc(hashed_details_length+1);
-
sprintf(hashed_details,"sybase_%s__",yyhost->value.str.val);
+
+sprintf(hashed_details,"sybase_%s___",yyhost->value.str.val);
}
break;
case 2: {
@@ -297,9 +297,9 @@
convert_to_string(yyuser);
host = yyhost->value.str.val;
user = yyuser->value.str.val;
- hashed_details_length =
yyhost->value.str.len+yyuser->value.str.len+6+3;
+ hashed_details_length =
+yyhost->value.str.len+yyuser->value.str.len+6+4;
hashed_details = (char *)
emalloc(hashed_details_length+1);
-
sprintf(hashed_details,"sybase_%s_%s_",yyhost->value.str.val,yyuser->value.str.val);
+
+sprintf(hashed_details,"sybase_%s_%s__",yyhost->value.str.val,yyuser->value.str.val);
}
break;
case 3: {
@@ -314,9 +314,9 @@
host = yyhost->value.str.val;
user = yyuser->value.str.val;
passwd = yypasswd->value.str.val;
- hashed_details_length =
yyhost->value.str.len+yyuser->value.str.len+yypasswd->value.str.len+6+3;
+ hashed_details_length =
+yyhost->value.str.len+yyuser->value.str.len+yypasswd->value.str.len+6+4;
hashed_details = (char *)
emalloc(hashed_details_length+1);
-
sprintf(hashed_details,"sybase_%s_%s_%s",yyhost->value.str.val,yyuser->value.str.val,yypasswd->value.str.val);
/* SAFE */
+
+sprintf(hashed_details,"sybase_%s_%s_%s_",yyhost->value.str.val,yyuser->value.str.val,yypasswd->value.str.val);
+ /* SAFE */
}
break;
case 4: {
@@ -333,7 +333,7 @@
user = yyuser->value.str.val;
passwd = yypasswd->value.str.val;
charset = yycharset->value.str.val;
- hashed_details_length =
yyhost->value.str.len+yyuser->value.str.len+yypasswd->value.str.len+yycharset->value.str.len+6+3;
+ hashed_details_length =
+yyhost->value.str.len+yyuser->value.str.len+yypasswd->value.str.len+yycharset->value.str.len+6+4;
+
hashed_details = (char *)
emalloc(hashed_details_length+1);
sprintf(hashed_details,"sybase_%s_%s_%s_%s",yyhost->value.str.val,yyuser->value.str.val,yypasswd->value.str.val,yycharset->value.str.val);
/* SAFE */
}
--
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]