Nashorn bugs (hg tip 23958764f866)
André Bargull
andrebargull at googlemail.com
Fri Sep 27 00:53:13 PDT 2013
A few more bugs in Nashorn.
- André
jjs> s = "(function(){y; return 0})()";
jjs> (function(){with({y:1}) eval(s) })();
jjs> (function(){with({get y(){print("get")}}) eval(s) })()
Expected: prints "get"
Actual: no output
jjs> s = " "; for (var i=0;i<31;++i) s+=s; s.length
-2147483648
Expected: no integer overflow
Actual: integer overflow
jjs> function f(o){var eval=0; with({get eval(){return o.eval}}) return
eval("1+2");}; f(this)
Expected: returns 3
Actual: throws TypeError
jjs> try{throw 3}catch(e){print(eval("e"))}
Expected: prints 3
Actual: throws ReferenceError
jjs> function f(){var a=1,e=2; try{throw 3}catch(e){return +function
g(){return eval("a+e")}()} }f()
Expected: returns 4
Actual: returns 3
jjs> function f(){var a=1; with({get a(){return false}}) return a}; f()
Expected: returns false
Actual: returns 0
jjs> function public(){"use strict"}
Expected: throws strict-mode SyntaxError
Actual: no error
jjs> function f(public){"use strict"}
Expected: throws strict-mode SyntaxError
Actual: no error
jjs> function f(){ L1:try{ return }finally{break L1} }f()
Exception in thread "main" java.lang.VerifyError: StackMapTable error:
bad offset
Exception Details:
Location:
jdk/nashorn/internal/scripts/Script$\^shell\_.f(Ljdk/nashorn/internal/runtime/ScriptFunction;Ljava/lang/Object;)Ljava/lang/Object;
@0: aload_0
Reason:
Invalid stackmap specification.
Current Frame:
bci: @17
flags: { }
locals: { 'jdk/nashorn/internal/runtime/ScriptFunction',
'java/lang/Object', 'jdk/nashorn/internal/runtime/ScriptObject' }
stack: { }
Bytecode:
0000000: 2ab6 0018 4da7 000c 3a04 1904 3a05 a700
0000010: 03
Exception Handler Table:
bci [5, 8] => handler: 8
Stackmap Table:
full_frame(@8,{Object[#20],Object[#54],Object[#56]},{Object[#44]})
same_frame(@17)
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2476)
at java.lang.Class.getDeclaredField(Class.java:1975)
at jdk.nashorn.internal.codegen.Compiler$2.run(Compiler.java:417)
at jdk.nashorn.internal.codegen.Compiler$2.run(Compiler.java:413)
at java.security.AccessController.doPrivileged(Native Method)
...
jjs> function f(e){ eval("e") }f()
jjs> function f(){ eval("e") }f()
java.lang.ClassCastException: Cannot cast
jdk.nashorn.internal.scripts.JO1P0 to jdk.nashorn.internal.scripts.JO1P1
jjs> function f(){switch(x){}}f()
Expected: throws ReferenceError "x" not defined
Actual: returns undefined
jjs> function f(){ function g(){return 0} function g(){return 1}
function g$1(){return 2}; return g$1() }f()
Expected: returns 2
Actual: returns 1
jjs> function f(){ function g(){return 0} var h=function g(){return 1};
function g$1(){return 2}; return h() }f()
Expected: returns 1
Actual: returns 2
jjs> function f(){ void {get ""(){}} }f()
Expected: properly encoded byte code names
Actual: `f$get \=` method name in generated code (null prefix `\=`
within name)
jjs> function f(){ void {get ":"(){}} }f()
Expected: properly encoded byte code names
Actual: `f$get \!` method name in generated code (missing null prefix `\=`)
jjs> function f(){ return Object.getOwnPropertyDescriptor({get
":"(){}}, ":").get.name }f()
Expected: don't return a mangled byte code name
Actual: returns "get \!"
jjs> function f(){ return Object.getOwnPropertyDescriptor({set
":"(a){}}, ":").set }f()
Expected: include leading `"` in function source representation
Actual: returns `:"(a){}`
jjs> eval("function " + Array.apply(null,Array(0x10000)).join("a") + "(){}")
Exception in thread "main" java.lang.ClassFormatError: Unknown constant
tag 58 in class file
jdk/nashorn/internal/scripts/Script$\^shell\_#1\^eval\_$2
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:752)
at
jdk.nashorn.internal.runtime.ScriptLoader.installClass(ScriptLoader.java:87)
at
jdk.nashorn.internal.runtime.Context$ContextCodeInstaller.install(Context.java:125)
at jdk.nashorn.internal.codegen.Compiler.install(Compiler.java:408)
...
jjs> (1000000000000000128).toString()
Expected: 1000000000000000100
Actual: 1000000000000000130
jjs> (1000000000000000128).toFixed()
Expected: 1000000000000000128
Actual: 1000000000000000130
jjs> Function("-", {toString:function(){throw "err"}})
Expected: throws "err"
Actual: throws SyntaxError
jjs> Function("return function() { eval(''); return anonymous; }")
Expected: throws ReferenceError
Actual: returns function
jjs> Array.prototype.splice.call(Java.type("java.util.HashMap"))
jjs> Array.prototype.slice.call(Java.type("java.util.HashMap"))
java.lang.ClassCastException: jdk.internal.dynalink.beans.StaticClass
cannot be cast to jdk.nashorn.internal.runtime.ScriptObject
Expected: same behaviour for non ScriptObjects
Actual: splice returns undefined whereas slice throws a ClassCastException
More information about the nashorn-dev
mailing list