checkpolicy: error out on parsing too big integers
Error out instead of silently converting too big integer values in policy sources. policy_parse.y:893:41: runtime error: implicit conversion from type 'unsigned long' of value 18446744073709551615 (64-bit, unsigned) to type 'unsigned int' changed the value to 4294967295 (32-bit, unsigned) Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
This commit is contained in:
parent
c7c582a0ef
commit
15fcc6df66
1 changed files with 18 additions and 2 deletions
|
@ -890,10 +890,26 @@ filename : FILENAME
|
||||||
{ yytext[strlen(yytext) - 1] = '\0'; if (insert_id(yytext + 1,0)) return -1; }
|
{ yytext[strlen(yytext) - 1] = '\0'; if (insert_id(yytext + 1,0)) return -1; }
|
||||||
;
|
;
|
||||||
number : NUMBER
|
number : NUMBER
|
||||||
{ $$ = strtoul(yytext,NULL,0); }
|
{ unsigned long x;
|
||||||
|
errno = 0;
|
||||||
|
x = strtoul(yytext, NULL, 0);
|
||||||
|
if (errno)
|
||||||
|
return -1;
|
||||||
|
#if ULONG_MAX > UINT_MAX
|
||||||
|
if (x > UINT_MAX)
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
|
$$ = (unsigned int) x;
|
||||||
|
}
|
||||||
;
|
;
|
||||||
number64 : NUMBER
|
number64 : NUMBER
|
||||||
{ $$ = strtoull(yytext,NULL,0); }
|
{ unsigned long long x;
|
||||||
|
errno = 0;
|
||||||
|
x = strtoull(yytext, NULL, 0);
|
||||||
|
if (errno)
|
||||||
|
return -1;
|
||||||
|
$$ = (uint64_t) x;
|
||||||
|
}
|
||||||
;
|
;
|
||||||
ipv6_addr : IPV6_ADDR
|
ipv6_addr : IPV6_ADDR
|
||||||
{ if (insert_id(yytext,0)) return -1; }
|
{ if (insert_id(yytext,0)) return -1; }
|
||||||
|
|
Loading…
Reference in a new issue