Changeset 58705 in webkit for trunk/JavaScriptCore/bytecode


Ignore:
Timestamp:
May 3, 2010, 3:18:59 PM (15 years ago)
Author:
[email protected]
Message:

2010-05-03 Oliver Hunt <[email protected]>

Reviewed by Maciej Stachowiak.

Interpreter crashes due to incorrect refcounting of cached structures.
https://bugs.webkit.org/show_bug.cgi?id=38491
rdar://problem/7926160

Make sure we ref/deref structures used for cached custom property getters

  • bytecode/CodeBlock.cpp: (JSC::CodeBlock::derefStructures): (JSC::CodeBlock::refStructures):

2010-05-03 Oliver Hunt <[email protected]>

Reviewed by Maciej Stachowiak.

Interpreter crashes due to incorrect refcounting of cached structures.
https://bugs.webkit.org/show_bug.cgi?id=38491

Add test for cached structure chains used for custom getters.

  • fast/js/pic/cached-named-property-getter.html:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/bytecode/CodeBlock.cpp

    r57955 r58705  
    13671367        return;
    13681368    }
    1369     if (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_proto) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_getter_proto)) {
     1369    if (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_proto) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_getter_proto) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_custom_proto)) {
    13701370        vPC[4].u.structure->deref();
    13711371        vPC[5].u.structure->deref();
    13721372        return;
    13731373    }
    1374     if (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_chain) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_getter_chain)) {
     1374    if (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_chain) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_getter_chain) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_custom_chain)) {
    13751375        vPC[4].u.structure->deref();
    13761376        vPC[5].u.structureChain->deref();
     
    13951395        || (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_self_list))
    13961396        || (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_getter_proto_list))
    1397         || (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_getter_self_list))) {
     1397        || (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_getter_self_list))
     1398        || (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_custom_proto_list))
     1399        || (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_custom_self_list))) {
    13981400        PolymorphicAccessStructureList* polymorphicStructures = vPC[4].u.polymorphicStructures;
    13991401        polymorphicStructures->derefStructures(vPC[5].u.operand);
     
    14141416        return;
    14151417    }
    1416     if (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_proto) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_getter_proto)) {
     1418    if (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_proto) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_getter_proto) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_custom_proto)) {
    14171419        vPC[4].u.structure->ref();
    14181420        vPC[5].u.structure->ref();
    14191421        return;
    14201422    }
    1421     if (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_chain) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_getter_chain)) {
     1423    if (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_chain) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_getter_chain) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_custom_chain)) {
    14221424        vPC[4].u.structure->ref();
    14231425        vPC[5].u.structureChain->ref();
Note: See TracChangeset for help on using the changeset viewer.