diff options
author | Alon Zakai <alonzakai@gmail.com> | 2018-03-16 09:40:30 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-16 09:40:30 -0700 |
commit | 963b585bf66a6b9a31c13f244f1e6612d0c96991 (patch) | |
tree | 749dc5b77a85d64e7680d512060e19f5fc5c7fad | |
parent | d37e6942a011ac72cf59934ca26c1993e37a23fd (diff) | |
download | binaryen-963b585bf66a6b9a31c13f244f1e6612d0c96991.tar.gz binaryen-963b585bf66a6b9a31c13f244f1e6612d0c96991.tar.bz2 binaryen-963b585bf66a6b9a31c13f244f1e6612d0c96991.zip |
check for errors when parsing s-expression load/store immediates (#1475)
-rw-r--r-- | src/wasm/wasm-s-parser.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp index 5887adfae..a185e02c3 100644 --- a/src/wasm/wasm-s-parser.cpp +++ b/src/wasm/wasm-s-parser.cpp @@ -1167,7 +1167,12 @@ static size_t parseMemAttributes(Element& s, Address* offset, Address* align, Ad const char *eq = strchr(str, '='); if (!eq) throw ParseException("missing = in memory attribute"); eq++; - uint64_t value = atoll(eq); + if (*eq == 0) throw ParseException("missing value in memory attribute", s.line, s.col); + char* endptr; + uint64_t value = strtoll(eq, &endptr, 10); + if (*endptr != 0) { + throw ParseException("bad memory attribute immediate", s.line, s.col); + } if (str[0] == 'a') { if (value > std::numeric_limits<uint32_t>::max()) throw ParseException("bad align"); *align = value; @@ -1202,7 +1207,6 @@ Expression* SExpressionWasmBuilder::makeStore(Element& s, Type type, bool isAtom ret->valueType = type; ret->bytes = parseMemBytes(&extra, getTypeSize(type)); size_t i = parseMemAttributes(s, &ret->offset, &ret->align, ret->bytes); - ret->ptr = parseExpression(s[i]); ret->value = parseExpression(s[i+1]); ret->finalize(); |