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 /Zend/zend_operators.h | |
| parent | dc3052062208b81e108a7c274b2409fc5bf640a9 (diff) | |
| download | php-git-cd033b1271883371d5dd93631d42b26d513978ac.tar.gz | |
Fix autoconversion of hexadecimal strings
It's time to close bug #5404 :)
Diffstat (limited to 'Zend/zend_operators.h')
| -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 */ |
