1
0
mirror of https://github.com/php/php-src.git synced 2026-04-25 08:58:28 +02:00

Better 0x handling - not change non-0x number behaviour

This commit is contained in:
Stanislav Malyshev
2000-11-14 17:54:11 +00:00
parent d4f9f83363
commit 0b6a8d0458
+18 -11
View File
@@ -1001,19 +1001,12 @@ ANY_CHAR (.|[\n])
}
<ST_IN_SCRIPTING>{LNUM}|{HNUM} {
<ST_IN_SCRIPTING>{LNUM} {
errno = 0;
zendlval->value.lval = strtoul(yytext, NULL, 0);
zendlval->value.lval = strtol(yytext, NULL, 0);
if (errno == ERANGE) { /* overflow */
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;
}
zendlval->value.dval = strtod(yytext,NULL);
zendlval->type = IS_DOUBLE;
return T_DNUMBER;
} else {
zendlval->type = IS_LONG;
@@ -1021,6 +1014,20 @@ ANY_CHAR (.|[\n])
}
}
<ST_IN_SCRIPTING>{HNUM} {
errno = 0;
zendlval->value.lval = strtoul(yytext, NULL, 16);
if (errno == ERANGE) { /* overflow */
/* not trying strtod - it returns trans on 0x-es */
zendlval->value.lval = LONG_MAX; /* maximal long */
zend_error(E_NOTICE,"Hex number is too big: %s",yytext);
} else {
zendlval->type = IS_LONG;
}
zendlval->type = IS_LONG;
return T_LNUMBER;
}
<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>{LNUM}|{HNUM} { /* treat numbers (almost) as strings inside encapsulated strings */
zendlval->value.str.val = (char *)estrndup(yytext, yyleng);
zendlval->value.str.len = yyleng;