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

Side by Side Diff: src/wasm/wasm-module.cc

Issue 1967023004: [wasm] Add UTF-8 validation (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase on parallel compilation Created 4 years, 7 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 unified diff | Download patch
« no previous file with comments | « src/wasm/wasm-function-name-table.cc ('k') | test/mjsunit/wasm/unicode-validation.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/base/atomic-utils.h" 5 #include "src/base/atomic-utils.h"
6 #include "src/macro-assembler.h" 6 #include "src/macro-assembler.h"
7 #include "src/objects.h" 7 #include "src/objects.h"
8 #include "src/property-descriptor.h" 8 #include "src/property-descriptor.h"
9 #include "src/v8.h" 9 #include "src/v8.h"
10 10
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 ModuleEnv& module_env, uint32_t& total_code_size, 579 ModuleEnv& module_env, uint32_t& total_code_size,
580 PropertyDescriptor& desc) { 580 PropertyDescriptor& desc) {
581 for (uint32_t i = FLAG_skip_compiling_wasm_funcs; 581 for (uint32_t i = FLAG_skip_compiling_wasm_funcs;
582 i < module->functions.size(); i++) { 582 i < module->functions.size(); i++) {
583 const WasmFunction& func = module->functions[i]; 583 const WasmFunction& func = module->functions[i];
584 if (thrower.error()) break; 584 if (thrower.error()) break;
585 585
586 DCHECK_EQ(i, func.func_index); 586 DCHECK_EQ(i, func.func_index);
587 WasmName str = module->GetName(func.name_offset, func.name_length); 587 WasmName str = module->GetName(func.name_offset, func.name_length);
588 WasmName str_null = {nullptr, 0}; 588 WasmName str_null = {nullptr, 0};
589 Handle<String> name = factory->InternalizeUtf8String(str);
590 Handle<Code> code = Handle<Code>::null(); 589 Handle<Code> code = Handle<Code>::null();
591 Handle<JSFunction> function = Handle<JSFunction>::null(); 590 Handle<JSFunction> function = Handle<JSFunction>::null();
591 Handle<String> function_name = Handle<String>::null();
592 if (func.external) { 592 if (func.external) {
593 // Lookup external function in FFI object. 593 // Lookup external function in FFI object.
594 MaybeHandle<JSFunction> function = 594 MaybeHandle<JSFunction> function =
595 LookupFunction(thrower, factory, ffi, i, str, str_null); 595 LookupFunction(thrower, factory, ffi, i, str, str_null);
596 if (function.is_null()) { 596 if (function.is_null()) {
597 return false; 597 return false;
598 } 598 }
599 code = compiler::CompileWasmToJSWrapper(isolate, &module_env, 599 code = compiler::CompileWasmToJSWrapper(isolate, &module_env,
600 function.ToHandleChecked(), 600 function.ToHandleChecked(),
601 func.sig, str, str_null); 601 func.sig, str, str_null);
602 } else { 602 } else {
603 if (FLAG_wasm_num_compilation_tasks != 0) { 603 if (FLAG_wasm_num_compilation_tasks != 0) {
604 code = results[i]; 604 code = results[i];
605 } else { 605 } else {
606 // Compile the function. 606 // Compile the function.
607 code = compiler::CompileWasmFunction(&thrower, isolate, &module_env, 607 code = compiler::CompileWasmFunction(&thrower, isolate, &module_env,
608 &func); 608 &func);
609 } 609 }
610 if (code.is_null()) { 610 if (code.is_null()) {
611 thrower.Error("Compilation of #%d:%.*s failed.", i, str.length(), 611 thrower.Error("Compilation of #%d:%.*s failed.", i, str.length(),
612 str.start()); 612 str.start());
613 return false; 613 return false;
614 } 614 }
615 if (func.exported) { 615 if (func.exported) {
616 function_name = factory->InternalizeUtf8String(str);
616 function = compiler::CompileJSToWasmWrapper( 617 function = compiler::CompileJSToWasmWrapper(
617 isolate, &module_env, name, code, instance.js_object, i); 618 isolate, &module_env, function_name, code, instance.js_object, i);
618 record_code_size(total_code_size, function->code()); 619 record_code_size(total_code_size, function->code());
619 } 620 }
620 } 621 }
621 if (!code.is_null()) { 622 if (!code.is_null()) {
622 // Install the code into the linker table. 623 // Install the code into the linker table.
623 module_env.linker->Finish(i, code); 624 module_env.linker->Finish(i, code);
624 code_table->set(i, *code); 625 code_table->set(i, *code);
625 record_code_size(total_code_size, *code); 626 record_code_size(total_code_size, *code);
626 } 627 }
627 if (func.exported) { 628 if (func.exported) {
628 // Exported functions are installed as read-only properties on the 629 // Exported functions are installed as read-only properties on the
629 // module. 630 // module.
630 desc.set_value(function); 631 desc.set_value(function);
631 Maybe<bool> status = JSReceiver::DefineOwnProperty( 632 Maybe<bool> status = JSReceiver::DefineOwnProperty(
632 isolate, instance.js_object, name, &desc, Object::THROW_ON_ERROR); 633 isolate, instance.js_object, function_name, &desc,
634 Object::THROW_ON_ERROR);
633 if (!status.IsJust()) 635 if (!status.IsJust())
634 thrower.Error("export of %.*s failed.", str.length(), str.start()); 636 thrower.Error("export of %.*s failed.", str.length(), str.start());
635 } 637 }
636 } 638 }
637 return true; 639 return true;
638 } 640 }
639 } // namespace 641 } // namespace
640 642
641 // Instantiates a wasm module as a JSObject. 643 // Instantiates a wasm module as a JSObject.
642 // * allocates a backing store of {mem_size} bytes. 644 // * allocates a backing store of {mem_size} bytes.
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
1007 wasm->GetInternalField(kWasmFunctionNamesArray), wasm->GetIsolate()); 1009 wasm->GetInternalField(kWasmFunctionNamesArray), wasm->GetIsolate());
1008 if (func_names_arr_obj->IsUndefined()) 1010 if (func_names_arr_obj->IsUndefined())
1009 return func_names_arr_obj; // Return undefined. 1011 return func_names_arr_obj; // Return undefined.
1010 return GetWasmFunctionNameFromTable( 1012 return GetWasmFunctionNameFromTable(
1011 Handle<ByteArray>::cast(func_names_arr_obj), func_index); 1013 Handle<ByteArray>::cast(func_names_arr_obj), func_index);
1012 } 1014 }
1013 1015
1014 } // namespace wasm 1016 } // namespace wasm
1015 } // namespace internal 1017 } // namespace internal
1016 } // namespace v8 1018 } // namespace v8
OLDNEW
« no previous file with comments | « src/wasm/wasm-function-name-table.cc ('k') | test/mjsunit/wasm/unicode-validation.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698