fail on too long offset and align constants
This commit is contained in:
@@ -619,16 +619,40 @@ paramsresulttypeuse :: { FuncType }
|
|||||||
| 'result' list(valtype) ')' { FuncType [] $2 }
|
| 'result' list(valtype) ')' { FuncType [] $2 }
|
||||||
|
|
||||||
memarg1 :: { MemArg }
|
memarg1 :: { MemArg }
|
||||||
: opt(offset) opt(align) { MemArg (fromMaybe 0 $1) (unpackAlign 1 $2) }
|
: opt(offset) opt(align) {%
|
||||||
|
let offset = fromMaybe 0 $1 in
|
||||||
|
let align = unpackAlign 1 $2 in
|
||||||
|
if offset >= 2 ^ 32 || align >= 2 ^ 32
|
||||||
|
then Left "u32 is out of boundaries"
|
||||||
|
else return $ MemArg offset align
|
||||||
|
}
|
||||||
|
|
||||||
memarg2 :: { MemArg }
|
memarg2 :: { MemArg }
|
||||||
: opt(offset) opt(align) { MemArg (fromMaybe 0 $1) (unpackAlign 2 $2) }
|
: opt(offset) opt(align) {%
|
||||||
|
let offset = fromMaybe 0 $1 in
|
||||||
|
let align = unpackAlign 2 $2 in
|
||||||
|
if offset >= 2 ^ 32 || align >= 2 ^ 32
|
||||||
|
then Left "u32 is out of boundaries"
|
||||||
|
else return $ MemArg offset align
|
||||||
|
}
|
||||||
|
|
||||||
memarg4 :: { MemArg }
|
memarg4 :: { MemArg }
|
||||||
: opt(offset) opt(align) { MemArg (fromMaybe 0 $1) (unpackAlign 4 $2) }
|
: opt(offset) opt(align) {%
|
||||||
|
let offset = fromMaybe 0 $1 in
|
||||||
|
let align = unpackAlign 4 $2 in
|
||||||
|
if offset >= 2 ^ 32 || align >= 2 ^ 32
|
||||||
|
then Left "u32 is out of boundaries"
|
||||||
|
else return $ MemArg offset align
|
||||||
|
}
|
||||||
|
|
||||||
memarg8 :: { MemArg }
|
memarg8 :: { MemArg }
|
||||||
: opt(offset) opt(align) { MemArg (fromMaybe 0 $1) (unpackAlign 8 $2) }
|
: opt(offset) opt(align) {%
|
||||||
|
let offset = fromMaybe 0 $1 in
|
||||||
|
let align = unpackAlign 8 $2 in
|
||||||
|
if offset >= 2 ^ 32 || align >= 2 ^ 32
|
||||||
|
then Left "u32 is out of boundaries"
|
||||||
|
else return $ MemArg offset align
|
||||||
|
}
|
||||||
|
|
||||||
instruction :: { [Instruction] }
|
instruction :: { [Instruction] }
|
||||||
: raw_instr { $1 }
|
: raw_instr { $1 }
|
||||||
|
|||||||
Reference in New Issue
Block a user