diff options
Diffstat (limited to 'Zend')
-rw-r--r-- | Zend/zend_language_scanner.l | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index b537c08141..c71d05e779 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -1018,10 +1018,16 @@ ANY_CHAR (.|[\n]) errno = 0; zendlval->value.lval = strtoul(yytext, NULL, 16); if (errno == ERANGE) { /* overflow */ - /* not trying strtod - it returns trans on 0x-es */ + /* not trying strtod - it returns trash on 0x-es */ zendlval->value.lval = LONG_MAX; /* maximal long */ zend_error(E_NOTICE,"Hex number is too big: %s",yytext); } else { + if(zendlval->value.lval < 0) { + /* maintain consistency with the old way */ + zendlval->value.dval = (unsigned long) zendlval->value.lval; + zendlval->type = IS_DOUBLE; + return T_DNUMBER; + } zendlval->type = IS_LONG; } zendlval->type = IS_LONG; |