Title: [147947] trunk/Source/_javascript_Core
Revision
147947
Author
[email protected]
Date
2013-04-08 13:25:13 -0700 (Mon, 08 Apr 2013)

Log Message

Make resolve more robust in the face of lookup misses
https://bugs.webkit.org/show_bug.cgi?id=114211

Reviewed by Filip Pizlo.

This simply short circuits the resolve operations in the
event that we don't find a path to a property.  There's no
repro case for this happening unfortunately.

* llint/LLIntSlowPaths.cpp:
(JSC::LLInt::LLINT_SLOW_PATH_DECL):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (147946 => 147947)


--- trunk/Source/_javascript_Core/ChangeLog	2013-04-08 20:09:17 UTC (rev 147946)
+++ trunk/Source/_javascript_Core/ChangeLog	2013-04-08 20:25:13 UTC (rev 147947)
@@ -1,5 +1,19 @@
 2013-04-08  Oliver Hunt  <[email protected]>
 
+        Make resolve more robust in the face of lookup misses
+        https://bugs.webkit.org/show_bug.cgi?id=114211
+
+        Reviewed by Filip Pizlo.
+
+        This simply short circuits the resolve operations in the
+        event that we don't find a path to a property.  There's no
+        repro case for this happening unfortunately.
+
+        * llint/LLIntSlowPaths.cpp:
+        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+
+2013-04-08  Oliver Hunt  <[email protected]>
+
         Build fix.
 
         * assembler/ARMv7Assembler.h:

Modified: trunk/Source/_javascript_Core/llint/LLIntSlowPaths.cpp (147946 => 147947)


--- trunk/Source/_javascript_Core/llint/LLIntSlowPaths.cpp	2013-04-08 20:09:17 UTC (rev 147946)
+++ trunk/Source/_javascript_Core/llint/LLIntSlowPaths.cpp	2013-04-08 20:25:13 UTC (rev 147947)
@@ -790,6 +790,9 @@
     ResolveOperations* operations = pc[3].u.resolveOperations;
     JSValue result = JSScope::resolve(exec, ident, operations);
     ASSERT(operations->size());
+    if (operations->isEmpty())
+        LLINT_RETURN_PROFILED(op_resolve, result);
+
     switch (operations->data()[0].m_operation) {
     case ResolveOperation::GetAndReturnGlobalProperty:
         pc[0].u.opcode = LLInt::getOpcode(llint_op_resolve_global_property);
@@ -844,7 +847,13 @@
             LLINT_THROW(globalData.exception);
     } else
         result = JSScope::resolveBase(exec, ident, false, operations, pc[5].u.putToBaseOperation);
+
     ASSERT(operations->size());
+    if (operations->isEmpty()) {
+        LLINT_PROFILE_VALUE(op_resolve_base, result);
+        LLINT_RETURN(result);
+    }
+
     switch (operations->data()[0].m_operation) {
     case ResolveOperation::ReturnGlobalObjectAsBase:
         pc[0].u.opcode = LLInt::getOpcode(llint_op_resolve_base_to_global);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to