More 32-bit negation-related overflow hazards patched.

Per bug report by Tonaie Resident.
This commit is contained in:
Sei Lisa 2018-07-26 02:31:51 +02:00
parent 960cbfaa09
commit 73599e0b04

View file

@ -837,7 +837,7 @@ class parser(object):
if self.tok[0] in ('INTEGER_VALUE', 'FLOAT_VALUE'): if self.tok[0] in ('INTEGER_VALUE', 'FLOAT_VALUE'):
val = self.tok[1] val = self.tok[1]
self.NextToken() self.NextToken()
return nr(nt=CONST, value=-val, return nr(nt=CONST, value=lslfuncs.neg(val),
t='integer' if type(val) == int else 'float') t='integer' if type(val) == int else 'float')
raise EParseSyntax(self) raise EParseSyntax(self)
if tok0 == 'INTEGER_VALUE': if tok0 == 'INTEGER_VALUE':
@ -1294,10 +1294,12 @@ list lazy_list_set(list L, integer i, list v)
if self.tok[0] == '-': if self.tok[0] == '-':
self.NextToken() self.NextToken()
if self.tok[0] == 'INTEGER_VALUE': if self.tok[0] == 'INTEGER_VALUE':
expr = nr(nt='CONST', t='integer', value=-self.tok[1]) expr = nr(nt='CONST', t='integer',
value=lslfuncs.neg(self.tok[1]))
self.NextToken() self.NextToken()
elif self.tok[0] == 'FLOAT_VALUE': elif self.tok[0] == 'FLOAT_VALUE':
expr = nr(nt='CONST', t='float', value=-self.tok[1]) expr = nr(nt='CONST', t='float',
value=lslfuncs.neg(self.tok[1]))
self.NextToken() self.NextToken()
else: else:
expr = self.Parse_unary_expression(AllowAssignment = False) expr = self.Parse_unary_expression(AllowAssignment = False)