Closed Bug 193418 Opened 23 years ago Closed 23 years ago

Empty block {} triggers NullPointerException when optimization >= 1

Categories

(Rhino Graveyard :: Compiler, defect)

x86
Linux
defect
Not set
normal

Tracking

(Not tracked)

VERIFIED FIXED

People

(Reporter: user, Assigned: norrisboyd)

Details

Attachments

(1 file)

Empty block {} triggers NullPointerException when optimization >= 1 With optimization level set to 1 or higher empty block { } usage can trigger NullPointerException in the compiler. To reproduce, run the following script against Rhino shell with the optimization level set to 1: //-------TEST START -------------------------------- var test = false; function f() { while (0) { { } } test = true; } f(); print(test ? "OK" : "FAILED!"); //-------TEST END ---------------------------------- The test should print "OK" but instead the following stack trace appears: Exception in thread "main" java.lang.NullPointerException at org.mozilla.javascript.optimizer.Block.buildBlocks(Block.java:137) at org.mozilla.javascript.optimizer.Optimizer.optimizeFunction(Optimizer.java:71) at org.mozilla.javascript.optimizer.Optimizer.optimize(Optimizer.java:149) at org.mozilla.javascript.optimizer.Codegen.compile(Codegen.java:95) at org.mozilla.javascript.Context.compile(Context.java:2072) at org.mozilla.javascript.Context.compile(Context.java:2002) at org.mozilla.javascript.Context.compileReader(Context.java:897) at org.mozilla.javascript.Context.evaluateReader(Context.java:815) at org.mozilla.javascript.tools.shell.Main.evaluateReader(Main.java:363) at org.mozilla.javascript.tools.shell.Main.processFileSecure(Main.java:354) at org.mozilla.javascript.tools.shell.Main.processFile(Main.java:291) at org.mozilla.javascript.tools.shell.Main.processSource(Main.java:283) at org.mozilla.javascript.tools.shell.Main.exec(Main.java:103) at org.mozilla.javascript.tools.shell.Main.main(Main.java:76)
The bug caused by missed check in StmtNodeIterator.nextNode for a possible null result of findFirstInterestingNode inside the search loop which made search to stop preliminary with non-empty stack. The patch fixes this and integrates StmtNodeIterator into Optimizer.buildStatementList as StmtNodeIterator was used only by buildStatementList and the new version is simpler.
I commited the fix
Status: NEW → RESOLVED
Closed: 23 years ago
Resolution: --- → FIXED
Testcase added to JS testsuite: mozilla/js/tests/js1_5/Regress/regress-193418.js
Verified FIXED. The above testcase now passes in the Rhino shell. I tested with optimization levels set to -1, 0, 1, and 9. Before this patch was committed, the test failed as Igor described above, whenever the optimization was set to be greater than 0.
Status: RESOLVED → VERIFIED
Targeting as resolved against 1.5R5
Target Milestone: --- → 1.5R5
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: