summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Object/WasmObjectFile.cpp10
-rw-r--r--llvm/test/Object/Inputs/WASM/missing-version.wasmbin0 -> 6 bytes
-rw-r--r--llvm/test/Object/wasm-missing-version.test2
3 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/Object/WasmObjectFile.cpp b/llvm/lib/Object/WasmObjectFile.cpp
index 7f80bf0b83a..91fc6138cd6 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))))
diff --git a/llvm/test/Object/Inputs/WASM/missing-version.wasm b/llvm/test/Object/Inputs/WASM/missing-version.wasm
new file mode 100644
index 00000000000..fc4f47f11ab
--- /dev/null
+++ b/llvm/test/Object/Inputs/WASM/missing-version.wasm
Binary files differ
diff --git a/llvm/test/Object/wasm-missing-version.test b/llvm/test/Object/wasm-missing-version.test
new file mode 100644
index 00000000000..98586e7da58
--- /dev/null
+++ b/llvm/test/Object/wasm-missing-version.test
@@ -0,0 +1,2 @@
+# RUN: not llvm-objdump -h %p/Inputs/WASM/missing-version.wasm 2>&1 | FileCheck %s
+# CHECK: {{.*}}: Missing version number
OpenPOWER on IntegriCloud