From: Zeev Suraski Date: Sun, 6 May 2001 12:48:17 +0000 (+0000) Subject: Fix autoconversion of hexadecimal strings X-Git-Tag: php-4.0.6RC1~117 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cd033b1271883371d5dd93631d42b26d513978ac;p=php Fix autoconversion of hexadecimal strings It's time to close bug #5404 :) --- diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index 9d3b9fdb68..9bb5a4803c 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -62,13 +62,18 @@ static inline int is_numeric_string(char *str, int length, long *lval, double *d long local_lval; double local_dval; char *end_ptr; + int conv_base=10; if (!length) { return 0; } + /* handle hex numbers */ + if (length>=2 && str[0]=='0' && (str[1]=='x' || str[1]=='X')) { + conv_base=16; + } errno=0; - local_lval = strtol(str, &end_ptr, 10); + local_lval = strtol(str, &end_ptr, 16); if (errno!=ERANGE && end_ptr == str+length) { /* integer string */ if (lval) { *lval = local_lval; @@ -76,6 +81,10 @@ static inline int is_numeric_string(char *str, int length, long *lval, double *d return IS_LONG; } + if (conv_base==16) { /* hex string, under UNIX strtod() messes it up */ + return 0; + } + errno=0; local_dval = strtod(str, &end_ptr); if (errno!=ERANGE && end_ptr == str+length) { /* floating point string */