From 89d5983ad903562f53793e1191fceb89dbdce0d5 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Tue, 14 Nov 2000 17:02:52 +0000 Subject: [PATCH] Attempt at better handling long 0x-numbers, like 0xffffffff --- Zend/zend_language_scanner.l | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 585073781c..1e02fc4818 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -38,6 +38,7 @@ #endif #include +#include #include "zend.h" #include "zend_alloc.h" #include "zend_language_parser.h" @@ -1002,10 +1003,17 @@ ANY_CHAR (.|[\n]) {LNUM}|{HNUM} { errno = 0; - zendlval->value.lval = strtol(yytext, NULL, 0); + zendlval->value.lval = strtoul(yytext, NULL, 0); if (errno == ERANGE) { /* overflow */ - zendlval->value.dval = strtod(yytext,NULL); - zendlval->type = IS_DOUBLE; + if(yytext[0] == 0 && (yytext[1] == 'x' || yytext[1] == 'X') ) { + /* strtod for 0x'es returns trash */ + zendlval->value.lval = LONG_MAX; /* maximal long */ + zendlval->type = IS_LONG; + zend_error(E_NOTICE,"Hex number is too big: %s",yytext); + } else { + zendlval->value.dval = strtod(yytext,NULL); + zendlval->type = IS_DOUBLE; + } return T_DNUMBER; } else { zendlval->type = IS_LONG; -- 2.40.0