ID: 14755 Updated by: sander Reported By: [EMAIL PROTECTED] Status: Open Bug Type: InterBase related Operating System: ALL PHP Version: 4.1.1 New Comment:
This is a fix for 12383. Can somebody look into it and apply the fix? Previous Comments: ------------------------------------------------------------------------ [2001-12-29 13:22:59] [EMAIL PROTECTED] Hello. I found a nasty bug in interbase extension, and I have the solution here. You have only to put it in the source code; I would but I don't know how to do this. I already posted the authors, but with no result. 104.05$ become 104.5$ !!! When traslating scaled numeric fields (i.e. with decimals), the routine _php_ibase_var_pval is faulty; here is the original code: #ifdef SQL_INT64 case SQL_INT64: val->type = IS_STRING; val->value.str.len = sprintf(string_data, "%Ld.%Ld", (ISC_INT64) (*((ISC_INT64 *)data) / (int) pow(10.0, (double) -scale)), (ISC_INT64) abs((int) (*((ISC_INT64 *)data) % (int) pow(10.0, (double) -scale)))); val->value.str.val = estrdup(string_data); break; #endif You can clearly see that this code is fine if the decimal part has no 0s before the first non 0 cipher. Here is my correction: #ifdef SQL_INT64 case SQL_INT64: val->type = IS_STRING; /* Experimental section by Giancarlo Niccolai */ if (scale) { int i, len; char dt[20]; double number = (double) ((ISC_INT64) (*((ISC_INT64 *)data))); for (i = 0; i < -scale; i++) number /= 10; sprintf(dt, "%%0.%df", -scale); val->value.str.len = sprintf (string_data, dt , number); } else { val->value.str.len = sprintf (string_data, "%Ld", (ISC_INT64) (*((ISC_INT64 *)data))); } /* End of experimental section */ val->value.str.val = estrdup(string_data); break; #endif Please, since Interbase is used for e-commerce, all the php-interbase applications can be at risk, if the site deals with cents... ------------------------------------------------------------------------ Edit this bug report at http://bugs.php.net/?id=14755&edit=1 -- 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]