| OLD | NEW | 
|     1 // Copyright 2015 the V8 project authors. All rights reserved. |     1 // Copyright 2015 the V8 project authors. All rights reserved. | 
|     2 // Use of this source code is governed by a BSD-style license that can be |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 #include "src/wasm/module-decoder.h" |     5 #include "src/wasm/module-decoder.h" | 
|     6  |     6  | 
|     7 #include "src/base/functional.h" |     7 #include "src/base/functional.h" | 
|     8 #include "src/base/platform/platform.h" |     8 #include "src/base/platform/platform.h" | 
|     9 #include "src/macro-assembler.h" |     9 #include "src/macro-assembler.h" | 
|    10 #include "src/objects.h" |    10 #include "src/objects.h" | 
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   302             module->function_tables.push_back( |   302             module->function_tables.push_back( | 
|   303                 {0, 0, std::vector<int32_t>(), true, false}); |   303                 {0, 0, std::vector<int32_t>(), true, false}); | 
|   304             expect_u8("element type", 0x20); |   304             expect_u8("element type", 0x20); | 
|   305             WasmIndirectFunctionTable* table = &module->function_tables.back(); |   305             WasmIndirectFunctionTable* table = &module->function_tables.back(); | 
|   306             consume_resizable_limits("element count", "elements", kMaxUInt32, |   306             consume_resizable_limits("element count", "elements", kMaxUInt32, | 
|   307                                      &table->size, &table->max_size); |   307                                      &table->size, &table->max_size); | 
|   308             break; |   308             break; | 
|   309           } |   309           } | 
|   310           case kExternalMemory: { |   310           case kExternalMemory: { | 
|   311             // ===== Imported memory ========================================= |   311             // ===== Imported memory ========================================= | 
|   312             //            import->index = |   312             consume_resizable_limits( | 
|   313             //            static_cast<uint32_t>(module->memories.size()); |   313                 "memory", "pages", WasmModule::kMaxLegalPages, | 
|   314             // TODO(titzer): imported memories |   314                 &module->min_mem_pages, &module->max_mem_pages); | 
|   315             break; |   315             break; | 
|   316           } |   316           } | 
|   317           case kExternalGlobal: { |   317           case kExternalGlobal: { | 
|   318             // ===== Imported global ========================================= |   318             // ===== Imported global ========================================= | 
|   319             import->index = static_cast<uint32_t>(module->globals.size()); |   319             import->index = static_cast<uint32_t>(module->globals.size()); | 
|   320             module->globals.push_back( |   320             module->globals.push_back( | 
|   321                 {kAstStmt, false, WasmInitExpr(), 0, true, false}); |   321                 {kAstStmt, false, WasmInitExpr(), 0, true, false}); | 
|   322             WasmGlobal* global = &module->globals.back(); |   322             WasmGlobal* global = &module->globals.back(); | 
|   323             global->type = consume_value_type(); |   323             global->type = consume_value_type(); | 
|   324             global->mutability = consume_u8("mutability") != 0; |   324             global->mutability = consume_u8("mutability") != 0; | 
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   766     } |   766     } | 
|   767   } |   767   } | 
|   768  |   768  | 
|   769   // Reads a length-prefixed string, checking that it is within bounds. Returns |   769   // Reads a length-prefixed string, checking that it is within bounds. Returns | 
|   770   // the offset of the string, and the length as an out parameter. |   770   // the offset of the string, and the length as an out parameter. | 
|   771   uint32_t consume_string(uint32_t* length, bool validate_utf8) { |   771   uint32_t consume_string(uint32_t* length, bool validate_utf8) { | 
|   772     *length = consume_u32v("string length"); |   772     *length = consume_u32v("string length"); | 
|   773     uint32_t offset = pc_offset(); |   773     uint32_t offset = pc_offset(); | 
|   774     const byte* string_start = pc_; |   774     const byte* string_start = pc_; | 
|   775     // Consume bytes before validation to guarantee that the string is not oob. |   775     // Consume bytes before validation to guarantee that the string is not oob. | 
|   776     consume_bytes(*length, "string"); |   776     if (*length > 0) consume_bytes(*length, "string"); | 
|   777     if (ok() && validate_utf8 && |   777     if (ok() && validate_utf8 && | 
|   778         !unibrow::Utf8::Validate(string_start, *length)) { |   778         !unibrow::Utf8::Validate(string_start, *length)) { | 
|   779       error(string_start, "no valid UTF-8 string"); |   779       error(string_start, "no valid UTF-8 string"); | 
|   780     } |   780     } | 
|   781     return offset; |   781     return offset; | 
|   782   } |   782   } | 
|   783  |   783  | 
|   784   uint32_t consume_sig_index(WasmModule* module, FunctionSig** sig) { |   784   uint32_t consume_sig_index(WasmModule* module, FunctionSig** sig) { | 
|   785     const byte* pos = pc_; |   785     const byte* pos = pc_; | 
|   786     uint32_t sig_index = consume_u32v("signature index"); |   786     uint32_t sig_index = consume_u32v("signature index"); | 
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1115     decoder.consume_bytes(size); |  1115     decoder.consume_bytes(size); | 
|  1116   } |  1116   } | 
|  1117   if (decoder.more()) decoder.error("unexpected additional bytes"); |  1117   if (decoder.more()) decoder.error("unexpected additional bytes"); | 
|  1118  |  1118  | 
|  1119   return decoder.toResult(std::move(table)); |  1119   return decoder.toResult(std::move(table)); | 
|  1120 } |  1120 } | 
|  1121  |  1121  | 
|  1122 }  // namespace wasm |  1122 }  // namespace wasm | 
|  1123 }  // namespace internal |  1123 }  // namespace internal | 
|  1124 }  // namespace v8 |  1124 }  // namespace v8 | 
| OLD | NEW |