ID: 10292 Updated by: sniper Reported By: [EMAIL PROTECTED] Old-Status: Open Status: Closed Bug Type: InterBase related PHP Version: 4.0.4pl1 Assigned To: Comments: Should be fixed in CVS now. --Jani Previous Comments: --------------------------------------------------------------------------- [2001-04-23 04:31:06] [EMAIL PROTECTED] Hi! I finally found the bug myself. And it was indeed in ./ext/interbase.c Normally you would terminate a string explicitly after a strncpy(), but one should think this was unnecessary in this part of the code, as the string-length is part of the variable-structure. Nevertheless I added a statement which filled in the missing zero to end the string, and Voila! All the strange characters disappeared. Could it be, that the code handling the PHP-arrays doesn't use the len-parameter, but only uses the estrdup() function (which assumes a correctly terminated string)? In the same function I also discovered a memoryleak when handling magic-quotes, so the final diff between the new interbase.c and the old one (version 1.48) looks like this (I have removed many of the leading spaces): $ diff interbase.c interbase.orig.c 1009c1009 < IB_ARRAY[ar_cnt].el_type = SQL_VARYING; --- > IB_ARRAY[ar_cnt].el_type = SQL_TEXT; 1731d1730 < val->value.str.val[len] = 0; 1733c1732,1738 < val->value.str.val = php_addslashes(val->value.str.val, len, &len, 1); /* Old string should be deleted */ --- > /* > char *tmp = val->value.str.val; > */ > val->value.str.val = php_addslashes(val->value.str.val, len, &len, 0); > /* > efree(tmp); > */ $ The first change is questioned in the code, so I just changed it! - and from my testing there wasn't any changed (or erroneous) behaviour noticed. The two other changes are the string-termination bugfix and the memory-leak bugfix. I have seen another bugreport concerning the formatting of the floating-point datatypes - I am currentliy not using floating-point fields in my databases, but maybe one should take a look at the FP-handling in the same function (_php_ibase_var_pval())? Yours sincerely, Lars PS! Keep up the good work - PHP is great! --------------------------------------------------------------------------- [2001-04-11 14:35:27] [EMAIL PROTECTED] // f1 and f2 are of type varchar $id=ibase_query($tr_id, "SELECT f1, f2 FROM t1;"); $res = ibase_fetch_row($id); echo "'".$res[0]."'"; // Working fine $arr[$res[0]] = 1; $arr[$res[1]] = 2; foreach ($res as $r => $v) echo "'$r'n"; // will in some cases add unexpected // characters to end of $r // It is the same with each construct // The same applies to ibase_fetch_object() The values in the database are correct, as the unwanted characters may vary depending on the number of columns in the select-statement. But it is always the same characters on repeated executions. I have made a work-around in a way like this: $arr[str_pad($res[0], -1)] = 1; I think it has something to do with the Interbase-API, as it is the same errors regardless of the Webserver (Apache 1.3.14 & 1.3.19, PHP 4.0.4pl1 or Win9x PWS, CGI or ISAPI version of PHP 4.0.4pl1) connecting to Interbase 6.01 on RedHat 6.1 and RedHat 6.2 The bug was first observed when doing a split(), where the last element in the resulting array had strange characters attached to the end. PHP configured with minimal changes to defaults (Interbase support, enable-track-vars). Hope this is sufficient information, otherwise write me for further info, and I will try to deliver it (if I can). Regards /Lars --------------------------------------------------------------------------- ATTENTION! Do NOT reply to this email! To reply, use the web interface found at http://bugs.php.net/?id=10292&edit=2 -- 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]