cvs: php-src /ext/standard basic_functions.c basic_functions.h config.m4 var_unserializer.re /ext/standard/tests/math bug27646.phpt

From: Date: Sat, 27 Mar 2004 00:50:41 +0000
Subject: cvs: php-src /ext/standard basic_functions.c basic_functions.h config.m4 var_unserializer.re /ext/standard/tests/math bug27646.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-26807@lists.php.net to get a copy of this message
helly Fri Mar 26 19:50:41 2004 EDT Modified files: /php-src/ext/standard config.m4 basic_functions.c basic_functions.h var_unserializer.re /php-src/ext/standard/tests/math bug27646.phpt Log: Portable solution for bug #27646 that works correct on Windows, too http://cvs.php.net/diff.php/php-src/ext/standard/config.m4?r1=1.67&r2=1.68&ty=u Index: php-src/ext/standard/config.m4 diff -u php-src/ext/standard/config.m4:1.67 php-src/ext/standard/config.m4:1.68 --- php-src/ext/standard/config.m4:1.67 Mon Oct 27 00:35:41 2003 +++ php-src/ext/standard/config.m4 Fri Mar 26 19:50:39 2004 @@ -1,4 +1,4 @@ -dnl $Id: config.m4,v 1.67 2003/10/27 05:35:41 iliaa Exp $ -*- sh -*- +dnl $Id: config.m4,v 1.68 2004/03/27 00:50:39 helly Exp $ -*- sh -*- divert(3)dnl @@ -326,6 +326,71 @@ fi ]) +AC_CHECK_FUNCS(fpclass isinf isnan) + +AC_CACHE_CHECK(whether atof() accepts NAN, ac_cv_atof_accept_nan,[ + AC_TRY_RUN([ +#include <math.h> +#include <stdlib.h> + +#ifdef HAVE_ISNAN +#define zend_isnan(a) isnan(a) +#elif defined(NAN) +#define zend_isnan(a) (((a)==NAN)?1:0) +#elif defined(HAVE_FPCLASS) +#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN)) +#else +#define zend_isnan(a) 0 +#endif + +int main(int argc, char** argv) +{ + return zend_isnan(atof("NAN")) ? 0 : 1; +} + ],[ + ac_cv_atof_accept_nan=yes + ],[ + ac_cv_atof_accept_nan=no + ],[ + ac_cv_atof_accept_nan=no + ]) + if test "$ac_cv_atof_accept_nan" = "yes"; then + AC_DEFINE([HAVE_ATOF_ACCEPTS_NAN], 1, [whether atof() accepts NAN]) + fi +]) + +AC_CACHE_CHECK(whether atof() accepts INF, ac_cv_atof_accept_inf,[ + AC_TRY_RUN([ +#include <math.h> +#include <stdlib.h> + +#ifdef HAVE_ISINF +#define zend_isinf(a) isinf(a) +#elif defined(INFINITY) +/* Might not work, but is required by ISO C99 */ +#define zend_isinf(a) (((a)==INFINITY)?1:0) +#elif defined(HAVE_FPCLASS) +#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF)) +#else +#define zend_isinf(a) 0 +#endif + +int main(int argc, char** argv) +{ + return zend_isinf(atof("INF")) && zend_isinf(atof("-INF")) ? 0 : 1; +} + ],[ + ac_cv_atof_accept_inf=yes + ],[ + ac_cv_atof_accept_inf=no + ],[ + ac_cv_atof_accept_inf=no + ]) + if test "$ac_cv_atof_accept_inf" = "yes"; then + AC_DEFINE([HAVE_ATOF_ACCEPTS_INF], 1, [whether atof() accepts INF]) + fi +]) + PHP_CHECK_I18N_FUNCS PHP_NEW_EXTENSION(standard, array.c base64.c basic_functions.c browscap.c crc32.c crypt.c \ http://cvs.php.net/diff.php/php-src/ext/standard/basic_functions.c?r1=1.658&r2=1.659&ty=u Index: php-src/ext/standard/basic_functions.c diff -u php-src/ext/standard/basic_functions.c:1.658 php-src/ext/standard/basic_functions.c:1.659 --- php-src/ext/standard/basic_functions.c:1.658 Fri Mar 26 14:53:07 2004 +++ php-src/ext/standard/basic_functions.c Fri Mar 26 19:50:39 2004 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.658 2004/03/26 19:53:07 helly Exp $ */ +/* $Id: basic_functions.c,v 1.659 2004/03/27 00:50:39 helly Exp $ */ #include "php.h" #include "php_streams.h" @@ -950,7 +950,7 @@ #define PHP_DOUBLE_INFINITY_HIGH 0x7ff00000 #define PHP_DOUBLE_QUIET_NAN_HIGH 0xfff80000 -static double php_get_nan() +PHPAPI double php_get_nan() { #if defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha) double val; @@ -963,7 +963,7 @@ #endif } -static double php_get_inf() +PHPAPI double php_get_inf() { #if defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha) double val; http://cvs.php.net/diff.php/php-src/ext/standard/basic_functions.h?r1=1.132&r2=1.133&ty=u Index: php-src/ext/standard/basic_functions.h diff -u php-src/ext/standard/basic_functions.h:1.132 php-src/ext/standard/basic_functions.h:1.133 --- php-src/ext/standard/basic_functions.h:1.132 Mon Feb 23 16:03:58 2004 +++ php-src/ext/standard/basic_functions.h Fri Mar 26 19:50:39 2004 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.h,v 1.132 2004/02/23 21:03:58 wez Exp $ */ +/* $Id: basic_functions.h,v 1.133 2004/03/27 00:50:39 helly Exp $ */ #ifndef BASIC_FUNCTIONS_H #define BASIC_FUNCTIONS_H @@ -231,4 +231,7 @@ #define SAFE_MODE_PROTECTED_ENV_VARS "LD_LIBRARY_PATH" #define SAFE_MODE_ALLOWED_ENV_VARS "PHP_" +PHPAPI double php_get_nan(); +PHPAPI double php_get_inf(); + #endif /* BASIC_FUNCTIONS_H */ http://cvs.php.net/diff.php/php-src/ext/standard/var_unserializer.re?r1=1.26&r2=1.27&ty=u Index: php-src/ext/standard/var_unserializer.re diff -u php-src/ext/standard/var_unserializer.re:1.26 php-src/ext/standard/var_unserializer.re:1.27 --- php-src/ext/standard/var_unserializer.re:1.26 Tue Mar 23 17:30:25 2004 +++ php-src/ext/standard/var_unserializer.re Fri Mar 26 19:50:39 2004 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: var_unserializer.re,v 1.26 2004/03/23 22:30:25 helly Exp $ */ +/* $Id: var_unserializer.re,v 1.27 2004/03/27 00:50:39 helly Exp $ */ #include "php.h" #include "ext/standard/php_var.h" @@ -320,7 +320,24 @@ return 1; } -"d:" (iv | nv | nvexp | "NAN" | "-"? "INF") ";" { +"d:" ("NAN" | "-"? "INF") ";" { + *p = YYCURSOR; + INIT_PZVAL(*rval); +#if defined(HAVE_ATOF_ACCEPTS_NAN) && defined(HAVE_ATOF_ACCEPTS_INF) + ZVAL_DOUBLE(*rval, atof(start + 2)); +#else + if (!strncmp(start + 2, "NAN", 3)) { + ZVAL_DOUBLE(*rval, php_get_nan()); + } else if (!strncmp(start + 2, "INF", 3)) { + ZVAL_DOUBLE(*rval, php_get_inf()); + } else if (!strncmp(start + 2, "-INF", 4)) { + ZVAL_DOUBLE(*rval, -php_get_inf()); + } +#endif + return 1; +} + +"d:" (iv | nv | nvexp) ";" { *p = YYCURSOR; INIT_PZVAL(*rval); ZVAL_DOUBLE(*rval, atof(start + 2)); http://cvs.php.net/diff.php/php-src/ext/standard/tests/math/bug27646.phpt?r1=1.2&r2=1.3&ty=u Index: php-src/ext/standard/tests/math/bug27646.phpt diff -u php-src/ext/standard/tests/math/bug27646.phpt:1.2 php-src/ext/standard/tests/math/bug27646.phpt:1.3 --- php-src/ext/standard/tests/math/bug27646.phpt:1.2 Thu Mar 25 17:36:36 2004 +++ php-src/ext/standard/tests/math/bug27646.phpt Fri Mar 26 19:50:41 2004 @@ -3,6 +3,16 @@ --FILE-- <?php +$f=12.3; +var_dump($f); +var_dump(serialize($f)); +var_dump(unserialize(serialize($f))); + +$f=-12.3; +var_dump($f); +var_dump(serialize($f)); +var_dump(unserialize(serialize($f))); + $f=-INF; var_dump($f); var_dump(serialize($f)); @@ -19,7 +29,13 @@ var_dump(unserialize(serialize($f))); ?> ---EXPECT-- +--EXPECTF-- +float(1%f) +string(%d) "d:1%s;" +float(1%f) +float(-1%f) +string(%d) "d:-1%s;" +float(-1%f) float(-INF) string(7) "d:-INF;" float(-INF)

« previous php.cvs (#26807) next »