diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2017-08-23 21:36:04 +0000 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2017-08-23 21:36:04 +0000 |
commit | a845167dcaad7c099d8d29eed578565fa1d3511a (patch) | |
tree | deb85540a4d281dd2cf6ee3a40dad88b67836b53 /llvm/lib/Object/WasmObjectFile.cpp | |
parent | 15848e597710e1d62ee4165495871861ac923aef (diff) | |
download | llvm-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.cpp | 10 |
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)))) |