ID: 49244 Updated by: sjo...@php.net Reported By: ronlentjes at yahoo dot com dot au Status: Verified Bug Type: Scripting Engine problem Operating System: Linux Fedora 8 PHP Version: 5.3.0 New Comment:
I can't commit things. Somebody with SVN access should apply my patch and commit it. I've improved some things and added a testcase: Index: ext/standard/formatted_print.c =================================================================== --- ext/standard/formatted_print.c (revision 288201) +++ ext/standard/formatted_print.c (working copy) @@ -42,6 +42,8 @@ #define FLOAT_PRECISION 6 #define MAX_FLOAT_DIGITS 38 #define MAX_FLOAT_PRECISION 40 +#define NOT_A_NUMBER "NaN" +#define INFINITE "INF" #if 0 /* trick to control varargs functions through cpp */ @@ -231,15 +233,15 @@ if (zend_isnan(number)) { is_negative = (number<0); - php_sprintf_appendstring(buffer, pos, size, "NaN", 3, 0, padding, - alignment, precision, is_negative, 0, always_sign); + php_sprintf_appendstring(buffer, pos, size, NOT_A_NUMBER, strlen(NOT_A_NUMBER), 0, padding, + alignment, strlen(NOT_A_NUMBER), is_negative, 0, always_sign); return; } if (zend_isinf(number)) { is_negative = (number<0); - php_sprintf_appendstring(buffer, pos, size, "INF", 3, 0, padding, - alignment, precision, is_negative, 0, always_sign); + php_sprintf_appendstring(buffer, pos, size, INFINITE, strlen(INFINITE), 0, padding, + alignment, strlen(INFINITE), is_negative, 0, always_sign); return; } Index: ext/standard/tests/strings/bug49244.phpt =================================================================== --- ext/standard/tests/strings/bug49244.phpt (revision 0) +++ ext/standard/tests/strings/bug49244.phpt (revision 0) @@ -0,0 +1,8 @@ +--TEST-- +Bug #49244 (Floating point NaN cause garbage characters) +--FILE-- +<?php +printf("%f\n", pow(-1.0, 0.3)); +?> +--EXPECT-- +NaN Previous Comments: ------------------------------------------------------------------------ [2009-09-01 16:34:22] garre...@php.net sjoerd -- That fix works fine for me. Can you commit that? ------------------------------------------------------------------------ [2009-08-20 19:19:13] sjoerd-php at linuxonly dot nl The problem is with calling php_sprintf_appendstring. Its 9th parameter is not precision, it is length. Index: ext/standard/formatted_print.c =================================================================== --- ext/standard/formatted_print.c (revision 287513) +++ ext/standard/formatted_print.c (working copy) @@ -232,14 +232,14 @@ if (zend_isnan(number)) { is_negative = (number<0); php_sprintf_appendstring(buffer, pos, size, "NaN", 3, 0, padding, - alignment, precision, is_negative, 0, always_sign); + alignment, 3, is_negative, 0, always_sign); return; } if (zend_isinf(number)) { is_negative = (number<0); php_sprintf_appendstring(buffer, pos, size, "INF", 3, 0, padding, - alignment, precision, is_negative, 0, always_sign); + alignment, 3, is_negative, 0, always_sign); return; } ------------------------------------------------------------------------ [2009-08-20 11:15:47] sjoerd-php at linuxonly dot nl Could reproduce with PHP 5.2.10. ------------------------------------------------------------------------ [2009-08-14 04:25:22] ronlentjes at yahoo dot com dot au Perhaps you test it differently than I do. I'll give you the easiest way to see it happen: put this in a file called test.php: --- <? $d = pow(-1.0, 0.3); printf ("%f\n", $d); ?> --- Output will be (bash, Fedora 8, Linux): # php test.php --- NaN*A --- Output for browser will be NaN??? or NaN???F or other variations of that. This is reporducable on versions 4.2.2 (crash), 5.2.4, 5.3.0 (as indicated previously). I just retried this now. Cheers, Ron Lentjes LC CLS. ------------------------------------------------------------------------ [2009-08-13 14:29:39] ras...@php.net I am unable to reproduce this in neither 5.2 nor 5.3, and Valgrind is clean on Debian. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/49244 -- Edit this bug report at http://bugs.php.net/?id=49244&edit=1