aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Object/WasmObjectFile.cpp
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2017-08-23 21:36:04 +0000
committerJonas Devlieghere <jonas@devlieghere.com>2017-08-23 21:36:04 +0000
commita845167dcaad7c099d8d29eed578565fa1d3511a (patch)
treedeb85540a4d281dd2cf6ee3a40dad88b67836b53 /llvm/lib/Object/WasmObjectFile.cpp
parent15848e597710e1d62ee4165495871861ac923aef (diff)
downloadllvm-a845167dcaad7c099d8d29eed578565fa1d3511a.zip
llvm-a845167dcaad7c099d8d29eed578565fa1d3511a.tar.gz
llvm-a845167dcaad7c099d8d29eed578565fa1d3511a.tar.bz2
[WebAssembly] Fix overflow for input with missing version
Differential revision: https://reviews.llvm.org/D37070 llvm-svn: 311605
Diffstat (limited to 'llvm/lib/Object/WasmObjectFile.cpp')
-rw-r--r--llvm/lib/Object/WasmObjectFile.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp
index 7f80bf0..91fc613 100644
--- a/llvm/lib/Object/WasmObjectFile.cpp
+++ b/llvm/lib/Object/WasmObjectFile.cpp
@@ -203,7 +203,16 @@ WasmObjectFile::WasmObjectFile(MemoryBufferRef Buffer, Error &Err)
object_error::parse_failed);
return;
}
+
+ const uint8_t *Eof = getPtr(getData().size());
const uint8_t *Ptr = getPtr(4);
+
+ if (Ptr + 4 > Eof) {
+ Err = make_error<StringError>("Missing version number",
+ object_error::parse_failed);
+ return;
+ }
+
Header.Version = readUint32(Ptr);
if (Header.Version != wasm::WasmVersion) {
Err = make_error<StringError>("Bad version number",
@@ -211,7 +220,6 @@ WasmObjectFile::WasmObjectFile(MemoryBufferRef Buffer, Error &Err)
return;
}
- const uint8_t *Eof = getPtr(getData().size());
WasmSection Sec;
while (Ptr < Eof) {
if ((Err = readSection(Sec, Ptr, getPtr(0))))