Possible scope leak in Nashorn
Tim Fox
timvolpe at gmail.com
Tue Dec 10 09:15:04 PST 2013
On 10/12/13 16:52, André Bargull wrote:
>> Thanks, I adapted the code to use ScriptUtils.wrap() and encountered a
>> strange situation where JSON.stringify returns undefined for a valid JS
>> object. Maybe another scope problem?
>>
>> Here is a reproducer:https://gist.github.com/purplefox/7893408
>
> No, it's not a scope problem. JSON.stringify isn't able to process
> ScriptObjectMirror objects, see ll. 263-270 in NativeJSON.java [1].
>
> - André
>
> [1]
> http://hg.openjdk.java.net/nashorn/jdk8/nashorn/file/tip/src/jdk/nashorn/internal/objects/NativeJSON.java
I see, so when a JS method in one scope is invoked from another scope
all the arguments get automatically wrapped in a ScriptObjectMirror. I
suppose NativeJSON needs to check for ScriptObjectMirror and unwrap
internally before attempting to stringify (?)
I wonder if anyone could suggest a workaround for now? (it's not obvious
to me)
Regarding the wrapping - do you think the argument wrapping is going to
impose a significant performance penalty? I'm thinking of CommonJS based
systems like node or vert.x (JS) where you are calling between scopes
basically every time you call the api.
Thanks!
More information about the nashorn-dev
mailing list