summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2001-05-06 12:48:17 +0000
committerZeev Suraski <zeev@php.net>2001-05-06 12:48:17 +0000
commitcd033b1271883371d5dd93631d42b26d513978ac (patch)
treee9bb7b90050a1fb16aa878c00129d5b8b9826d4d
parentdc3052062208b81e108a7c274b2409fc5bf640a9 (diff)
downloadphp-git-cd033b1271883371d5dd93631d42b26d513978ac.tar.gz
Fix autoconversion of hexadecimal strings
It's time to close bug #5404 :)
-rw-r--r--Zend/zend_operators.h11
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 */