diff options
author | Zeev Suraski <zeev@php.net> | 2001-05-06 12:48:17 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 2001-05-06 12:48:17 +0000 |
commit | cd033b1271883371d5dd93631d42b26d513978ac (patch) | |
tree | e9bb7b90050a1fb16aa878c00129d5b8b9826d4d | |
parent | dc3052062208b81e108a7c274b2409fc5bf640a9 (diff) | |
download | php-git-cd033b1271883371d5dd93631d42b26d513978ac.tar.gz |
Fix autoconversion of hexadecimal strings
It's time to close bug #5404 :)
-rw-r--r-- | Zend/zend_operators.h | 11 |
1 files changed, 10 insertions, 1 deletions
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 */ |