Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(610)

Unified Diff: src/wasm/module-decoder.cc

Issue 2362663002: [wasm] Break loops in the module-decoder upon error. (Closed)
Patch Set: Change all loop breaks to the same pattern. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/wasm/module-decoder.cc
diff --git a/src/wasm/module-decoder.cc b/src/wasm/module-decoder.cc
index 0aa620722949803b3e733159b5ea10d50a24cea9..c7e7fa5c901ec7c5d7dd9377b8fd8f566abe1f74 100644
--- a/src/wasm/module-decoder.cc
+++ b/src/wasm/module-decoder.cc
@@ -151,8 +151,7 @@ class ModuleDecoder : public Decoder {
uint32_t signatures_count = consume_u32v("signatures count");
module->signatures.reserve(SafeReserve(signatures_count));
// Decode signatures.
- for (uint32_t i = 0; i < signatures_count; ++i) {
- if (failed()) break;
+ for (uint32_t i = 0; ok() && i < signatures_count; ++i) {
TRACE("DecodeSignature[%d] module+%d\n", i,
static_cast<int>(pc_ - start_));
FunctionSig* s = consume_sig();
@@ -163,8 +162,7 @@ class ModuleDecoder : public Decoder {
case WasmSection::Code::FunctionSignatures: {
uint32_t functions_count = consume_u32v("functions count");
module->functions.reserve(SafeReserve(functions_count));
- for (uint32_t i = 0; i < functions_count; ++i) {
- if (failed()) break;
+ for (uint32_t i = 0; ok() && i < functions_count; ++i) {
module->functions.push_back({nullptr, // sig
i, // func_index
0, // sig_index
@@ -186,7 +184,7 @@ class ModuleDecoder : public Decoder {
static_cast<uint32_t>(module->functions.size()));
break;
}
- for (uint32_t i = 0; i < functions_count; ++i) {
+ for (uint32_t i = 0; ok() && i < functions_count; ++i) {
WasmFunction* function = &module->functions[i];
uint32_t size = consume_u32v("body size");
function->code_start_offset = pc_offset();
@@ -211,13 +209,13 @@ class ModuleDecoder : public Decoder {
break;
}
- for (uint32_t i = 0; i < functions_count; ++i) {
+ for (uint32_t i = 0; ok() && i < functions_count; ++i) {
WasmFunction* function = &module->functions[i];
function->name_offset =
consume_string(&function->name_length, false);
uint32_t local_names_count = consume_u32v("local names count");
- for (uint32_t j = 0; j < local_names_count; j++) {
+ for (uint32_t j = 0; ok() && j < local_names_count; j++) {
uint32_t unused = 0;
uint32_t offset = consume_string(&unused, false);
USE(unused);
@@ -230,8 +228,7 @@ class ModuleDecoder : public Decoder {
uint32_t globals_count = consume_u32v("globals count");
module->globals.reserve(SafeReserve(globals_count));
// Decode globals.
- for (uint32_t i = 0; i < globals_count; ++i) {
- if (failed()) break;
+ for (uint32_t i = 0; ok() && i < globals_count; ++i) {
TRACE("DecodeGlobal[%d] module+%d\n", i,
static_cast<int>(pc_ - start_));
// Add an uninitialized global and pass a pointer to it.
@@ -245,8 +242,7 @@ class ModuleDecoder : public Decoder {
uint32_t data_segments_count = consume_u32v("data segments count");
module->data_segments.reserve(SafeReserve(data_segments_count));
// Decode data segments.
- for (uint32_t i = 0; i < data_segments_count; ++i) {
- if (failed()) break;
+ for (uint32_t i = 0; ok() && i < data_segments_count; ++i) {
TRACE("DecodeDataSegment[%d] module+%d\n", i,
static_cast<int>(pc_ - start_));
module->data_segments.push_back({0, // dest_addr
@@ -265,8 +261,7 @@ class ModuleDecoder : public Decoder {
static const uint32_t kSupportedTableCount = 1;
module->function_tables.reserve(SafeReserve(kSupportedTableCount));
// Decode function table.
- for (uint32_t i = 0; i < kSupportedTableCount; ++i) {
- if (failed()) break;
+ for (uint32_t i = 0; ok() && i < kSupportedTableCount; ++i) {
TRACE("DecodeFunctionTable[%d] module+%d\n", i,
static_cast<int>(pc_ - start_));
module->function_tables.push_back({0, 0, std::vector<uint16_t>()});
@@ -294,8 +289,7 @@ class ModuleDecoder : public Decoder {
uint32_t import_table_count = consume_u32v("import table count");
module->import_table.reserve(SafeReserve(import_table_count));
// Decode import table.
- for (uint32_t i = 0; i < import_table_count; ++i) {
- if (failed()) break;
+ for (uint32_t i = 0; ok() && i < import_table_count; ++i) {
TRACE("DecodeImportTable[%d] module+%d\n", i,
static_cast<int>(pc_ - start_));
@@ -325,8 +319,7 @@ class ModuleDecoder : public Decoder {
uint32_t export_table_count = consume_u32v("export table count");
module->export_table.reserve(SafeReserve(export_table_count));
// Decode export table.
- for (uint32_t i = 0; i < export_table_count; ++i) {
- if (failed()) break;
+ for (uint32_t i = 0; ok() && i < export_table_count; ++i) {
TRACE("DecodeExportTable[%d] module+%d\n", i,
static_cast<int>(pc_ - start_));
@@ -518,7 +511,7 @@ class ModuleDecoder : public Decoder {
error("invalid table maximum size");
}
- for (uint32_t i = 0; i < table->size; ++i) {
+ for (uint32_t i = 0; ok() && i < table->size; ++i) {
uint16_t index = consume_u32v();
if (index >= module->functions.size()) {
error(pc_ - sizeof(index), "invalid function index");
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698