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

Side by Side Diff: src/interpreter/interpreter.cc

Issue 1683103002: [compiler] Sanitize entry points to LookupSlot access. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix REBASE error. Created 4 years, 10 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
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/interpreter/interpreter.h" 5 #include "src/interpreter/interpreter.h"
6 6
7 #include "src/ast/prettyprinter.h" 7 #include "src/ast/prettyprinter.h"
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/factory.h" 10 #include "src/factory.h"
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 // Stores the object in the accumulator into |slot_index| of |context|. 460 // Stores the object in the accumulator into |slot_index| of |context|.
461 void Interpreter::DoStaContextSlotWide(InterpreterAssembler* assembler) { 461 void Interpreter::DoStaContextSlotWide(InterpreterAssembler* assembler) {
462 DoStaContextSlot(assembler); 462 DoStaContextSlot(assembler);
463 } 463 }
464 464
465 void Interpreter::DoLoadLookupSlot(Runtime::FunctionId function_id, 465 void Interpreter::DoLoadLookupSlot(Runtime::FunctionId function_id,
466 InterpreterAssembler* assembler) { 466 InterpreterAssembler* assembler) {
467 Node* index = __ BytecodeOperandIdx(0); 467 Node* index = __ BytecodeOperandIdx(0);
468 Node* name = __ LoadConstantPoolEntry(index); 468 Node* name = __ LoadConstantPoolEntry(index);
469 Node* context = __ GetContext(); 469 Node* context = __ GetContext();
470 Node* result_pair = __ CallRuntime(function_id, context, context, name); 470 Node* result = __ CallRuntime(function_id, context, name);
471 Node* result = __ Projection(0, result_pair);
472 __ SetAccumulator(result); 471 __ SetAccumulator(result);
473 __ Dispatch(); 472 __ Dispatch();
474 } 473 }
475 474
476 475
477 // LdaLookupSlot <name_index> 476 // LdaLookupSlot <name_index>
478 // 477 //
479 // Lookup the object with the name in constant pool entry |name_index| 478 // Lookup the object with the name in constant pool entry |name_index|
480 // dynamically. 479 // dynamically.
481 void Interpreter::DoLdaLookupSlot(InterpreterAssembler* assembler) { 480 void Interpreter::DoLdaLookupSlot(InterpreterAssembler* assembler) {
482 DoLoadLookupSlot(Runtime::kLoadLookupSlot, assembler); 481 DoLoadLookupSlot(Runtime::kLoadLookupSlot, assembler);
483 } 482 }
484 483
485 484
486 // LdaLookupSlotInsideTypeof <name_index> 485 // LdaLookupSlotInsideTypeof <name_index>
487 // 486 //
488 // Lookup the object with the name in constant pool entry |name_index| 487 // Lookup the object with the name in constant pool entry |name_index|
489 // dynamically without causing a NoReferenceError. 488 // dynamically without causing a NoReferenceError.
490 void Interpreter::DoLdaLookupSlotInsideTypeof(InterpreterAssembler* assembler) { 489 void Interpreter::DoLdaLookupSlotInsideTypeof(InterpreterAssembler* assembler) {
491 DoLoadLookupSlot(Runtime::kLoadLookupSlotNoReferenceError, assembler); 490 DoLoadLookupSlot(Runtime::kLoadLookupSlotInsideTypeof, assembler);
492 } 491 }
493 492
494 493
495 // LdaLookupSlotWide <name_index> 494 // LdaLookupSlotWide <name_index>
496 // 495 //
497 // Lookup the object with the name in constant pool entry |name_index| 496 // Lookup the object with the name in constant pool entry |name_index|
498 // dynamically. 497 // dynamically.
499 void Interpreter::DoLdaLookupSlotWide(InterpreterAssembler* assembler) { 498 void Interpreter::DoLdaLookupSlotWide(InterpreterAssembler* assembler) {
500 DoLdaLookupSlot(assembler); 499 DoLdaLookupSlot(assembler);
501 } 500 }
502 501
503 502
504 // LdaLookupSlotInsideTypeofWide <name_index> 503 // LdaLookupSlotInsideTypeofWide <name_index>
505 // 504 //
506 // Lookup the object with the name in constant pool entry |name_index| 505 // Lookup the object with the name in constant pool entry |name_index|
507 // dynamically without causing a NoReferenceError. 506 // dynamically without causing a NoReferenceError.
508 void Interpreter::DoLdaLookupSlotInsideTypeofWide( 507 void Interpreter::DoLdaLookupSlotInsideTypeofWide(
509 InterpreterAssembler* assembler) { 508 InterpreterAssembler* assembler) {
510 DoLdaLookupSlotInsideTypeof(assembler); 509 DoLdaLookupSlotInsideTypeof(assembler);
511 } 510 }
512 511
513 void Interpreter::DoStoreLookupSlot(LanguageMode language_mode, 512 void Interpreter::DoStoreLookupSlot(LanguageMode language_mode,
514 InterpreterAssembler* assembler) { 513 InterpreterAssembler* assembler) {
515 Node* value = __ GetAccumulator(); 514 Node* value = __ GetAccumulator();
516 Node* index = __ BytecodeOperandIdx(0); 515 Node* index = __ BytecodeOperandIdx(0);
517 Node* name = __ LoadConstantPoolEntry(index); 516 Node* name = __ LoadConstantPoolEntry(index);
518 Node* context = __ GetContext(); 517 Node* context = __ GetContext();
519 Node* language_mode_node = __ NumberConstant(language_mode); 518 Node* result = __ CallRuntime(is_strict(language_mode)
520 Node* result = __ CallRuntime(Runtime::kStoreLookupSlot, context, value, 519 ? Runtime::kStoreLookupSlot_Strict
521 context, name, language_mode_node); 520 : Runtime::kStoreLookupSlot_Sloppy,
521 context, name, value);
522 __ SetAccumulator(result); 522 __ SetAccumulator(result);
523 __ Dispatch(); 523 __ Dispatch();
524 } 524 }
525 525
526 526
527 // StaLookupSlotSloppy <name_index> 527 // StaLookupSlotSloppy <name_index>
528 // 528 //
529 // Store the object in accumulator to the object with the name in constant 529 // Store the object in accumulator to the object with the name in constant
530 // pool entry |name_index| in sloppy mode. 530 // pool entry |name_index| in sloppy mode.
531 void Interpreter::DoStaLookupSlotSloppy(InterpreterAssembler* assembler) { 531 void Interpreter::DoStaLookupSlotSloppy(InterpreterAssembler* assembler) {
(...skipping 1356 matching lines...) Expand 10 before | Expand all | Expand 10 after
1888 Node* index = __ LoadRegister(index_reg); 1888 Node* index = __ LoadRegister(index_reg);
1889 Node* context = __ GetContext(); 1889 Node* context = __ GetContext();
1890 Node* result = __ CallRuntime(Runtime::kForInStep, context, index); 1890 Node* result = __ CallRuntime(Runtime::kForInStep, context, index);
1891 __ SetAccumulator(result); 1891 __ SetAccumulator(result);
1892 __ Dispatch(); 1892 __ Dispatch();
1893 } 1893 }
1894 1894
1895 } // namespace interpreter 1895 } // namespace interpreter
1896 } // namespace internal 1896 } // namespace internal
1897 } // namespace v8 1897 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698