Closed Bug 547086 Opened 15 years ago Closed 15 years ago

js_TryMethod suppresses "too much recursion" exception, going in circles indefinitely

Categories

(Core :: JavaScript Engine, defect)

x86
macOS
defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: gal, Assigned: gal)

References

Details

(Whiteboard: fixed-in-tracemonkey)

Attachments

(1 file)

      No description provided.
Attached patch patch (deleted) — Splinter Review
Assignee: general → gal
Attachment #427657 - Flags: review?(mrbkap)
Attachment #427657 - Flags: review?(mrbkap) → review+
http://hg.mozilla.org/tracemonkey/rev/10a40c748aed
Whiteboard: fixed-in-tracemonkey
from tracemonkey tinderbox with this checkin:

begin test: ecma/GlobalObject/15.1-2-n.js
15.1-2-n The Global Object
TEST-UNEXPECTED-FAIL | automation.py | Exited with code 11 during test run
INFO | automation.py | Application ran for: 0:02:10.836400
INFO | automation.py | Reading PID log: /tmp/tmptvYAC5pidlog
PROCESS-CRASH | automation.py | application crashed (minidump found)
Operating system: Linux
                  0.0.0 Linux 2.6.18-53.1.19.el5 #1 SMP Wed May 7 08:20:19 EDT 2008 i686
CPU: x86
     GenuineIntel family 6 model 23 stepping 8
     1 CPU

Crash reason:  SIGSEGV
Crash address: 0xc

Thread 0 (crashed)
 0  libmozjs.so!js_ComputeThis [jsapi.h:10a40c748aed : 177 + 0x0]
    eip = 0x00180372   esp = 0xbfa299f4   ebp = 0xbfa29a3c   ebx = 0x002773dc
    esi = 0xb2ee2c00   edi = 0xad5ee068   eax = 0x00000000   ecx = 0x00000000
    edx = 0x00000001   efl = 0x00010246
    Found by: given as instruction pointer in context
 1  libmozjs.so!js_Invoke [jsinterp.cpp:10a40c748aed : 1217 + 0x1c]
    eip = 0x0018074d   esp = 0xbfa29a44   ebp = 0xbfa29b1c
    Found by: previous frame's frame pointer
 2  libmozjs.so!js_Interpret [jsops.cpp:10a40c748aed : 2303 + 0x20]
    eip = 0x00171649   esp = 0xbfa29b24   ebp = 0xbfa29dfc
    Found by: previous frame's frame pointer
 3  libmozjs.so!js_Execute [jsinterp.cpp:10a40c748aed : 1665 + 0xa]
    eip = 0x0017fe72   esp = 0xbfa29e04   ebp = 0xbfa29ebc
    Found by: previous frame's frame pointer
sayrer backed this out in http://hg.mozilla.org/tracemonkey/rev/767ed57a7bbd at my urging but this is still crashing. It didn't crash in the check in prior to http://hg.mozilla.org/tracemonkey/rev/10a40c748aed however. I'll bisect and report back.
I fingered the wrong patch. 

regression changeset: 38099:a4df44da864c user: Andreas Gal <gal@mozilla.com> date: Fri Feb 19 17:31:44 2010 -0800 summary: Remove LiveConnect kludge from call path (1.9.3 will not have LiveConnect according to jst, r=brendan).
Working on it.
With current TM tip (shell). Trying xpcshell next.

whale:tests gal$ ./jsDriver.pl -f /dev/stdout -e smdebug -s ../Darwin_DBG.OBJ/js -l ecma/GlobalObject/15.1-2-n.js
-#- Executing 1 test(s).
<html><head>
<title>Test results, smdebug</title>
</head>
<body bgcolor='white'>
<a name='tippy_top'></a>
<h2>Test results, smdebug</h2><br>
<p class='results_summary'>
Test List: ecma/GlobalObject/15.1-2-n.js<br>
Skip List: (none)<br>
1 test(s) selected, 1 test(s) completed, 0 failures reported (0% failed)<br>
Engine command line: ../Darwin_DBG.OBJ/js <br>
OS type: Darwin whale.local 10.2.0 Darwin Kernel Version 10.2.0: Tue Nov  3 10:37:10 PST 2009; root:xnu-1486.2.11~1/RELEASE_I386 i386<br>
Testcase execution time: 0 seconds.<br>
Tests completed on Sat Feb 20 11:34:59 2010.<br><br>
<h1>Whoop-de-doo, nothing failed!</h1>
</body>-#- Wrote results to '/dev/stdout'.
whale:tests gal$
try firefox ./jsreftest.html?test=ecma/GlobalObject/15.1-2-n.js from the js/src/tests dir.
The above command line doesn't find the file.

If I specify a full path, a dialog asks for special permissions. If I click on ok, a small dialog box appears with no text and two buttons without labels. Its modal and neither button is active.

Can you give me the precise command line and path how I can run the test in the browser?
Worth putting back this bug's patch and backing out the real regressor's patch?

/be
yeah, I'll reland it.
I found the problem. I need mrbkap for the review though. I will see if Brendan can help.
python firefox-debug/_tests/reftest/runreftest.py --debugger=gdb --extra-profile-file=js/src/tests/user.js  js/src/tests/ecma/GlobalObject/jstests.list

the command line in comment 8 will work if you copy the js/src/tests/user.js to your profile.
njn reported this:

s: win32-slave56REFTEST TEST-UNEXPECTED-PASS
file:///e:/builds/moz2_slave/tracemonkey-win32-debug-unittest-jsreftest/build/jsreftest/tests/jsreftest.html?test=js1_5/extensions/regress-322957.js
| TryMethod should not eat getter exceptions item 1
Igor wrote the original test. It was set to expected-fail. It passes now since we fixed the bug. It makes me wonder why we never fixed this before though. Igor?
(In reply to comment #16)
> Igor wrote the original test. It was set to expected-fail. It passes now since
> we fixed the bug. It makes me wonder why we never fixed this before though.

IIRC there was some compatibility worries as TryMethod was supposed to just query if method exists, it was not expected to throw exceptions. But that is not true any longer and we should fix the suite to require the test to pass.
I am wondering whether this is also related to this bug:

TEST-UNEXPECTED-FAIL | /builds/slave/tracemonkey-linux-opt-unittest-xpcshell/build/xpcshell/tests/test_places/queries/test_tags.js | test failed (with xpcshell return code: 0), see following log:
  >>>>>>>
  TEST-INFO | (xpcshell/head.js) | test 1 pending
TEST-PASS | /builds/slave/tracemonkey-linux-opt-unittest-xpcshell/build/xpcshell/tests/test_places/queries/head_queries.js | [check_no_bookmarks : 501] 0 == 0
Running test: Tags getter/setter should work correctly
  Without setting tags, tags getter should return empty array
http://hg.mozilla.org/mozilla-central/rev/10a40c748aed
Status: NEW → RESOLVED
Closed: 15 years ago
Resolution: --- → FIXED
Flags: in-testsuite+
Blocks: 566818
No longer blocks: 566818
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: