[ 
https://issues.apache.org/jira/browse/COUCHDB-1397?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13198936#comment-13198936
 ] 

Paul Joseph Davis commented on COUCHDB-1397:
--------------------------------------------

Describing this as exploiting a bug is incorrect. SpiderMonkey had a 
non-standard extension to JavaScript that allowed for this syntax to be 
considered valid. It was enabled by default.

Recent SpiderMonkey trunk has removed this option so it is no longer an error. 
The logic underneath is interesting in that it has to specifically check for 
this condition (ie, its completely valid except for a single "is anonymous 
function as statement" check.

The nicest (and probably least likely) solution would be for SpiderMonkey to 
add this option back but just disable it by default. I asked the SM team in IRC 
shortly after we found the issue and they expressed a very negative view of 
this approach so I doubt it's a possibility.

For reference, Jason's example:

{ "views":{"people":{"map": 
      "function(doc) { emit(doc.name, 1) }" 
    }}} 

And a fixed example that could work (with modifications to couchjs):

{ "views":{"people":{"map": 
      "function map(doc) { emit(doc.name, 1) }" 
    }}}

and alternatively: 

{ "views":{"people":{"map": 
      "var map = function(doc) { emit(doc.name, 1) }" 
    }}}

We can upgrade couchjs to accept either form quite easily. I think a reasonable 
plan would be to have a version of couchjs that accepts both and logs a 
deprecation warning about the old version. Then we just need to go on a PR 
campaign to get everyone to make the upgrade so they're prepared for when their 
code eventually needs to run on a newer SpiderMonkey.

Also, I'm not convinced that this needs to be in 1.2. We still have a bit of 
time to prepare a 1.2.1 that includes this. 1.2 should've been out a long time 
ago and I'd rather we focus on getting that out and then worrying about this 
afterwards since we have a plausible backwards compatible upgrade path.


                
> Function expressions, evals in SpiderMonkey
> -------------------------------------------
>
>                 Key: COUCHDB-1397
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1397
>             Project: CouchDB
>          Issue Type: Bug
>          Components: JavaScript View Server
>    Affects Versions: 1.2
>         Environment: All
>            Reporter: Jason Smith
>
> New SpiderMonkey releases do not eval() a sole anonymous function expression. 
> That is not a valid JavaScript statement, and so it is not a valid JavaScript 
> script.
> COUCHDB-1302 addressed this for 1.1 and the 1.1.x branch. This ticket is for 
> 1.2. (Sorry to spam COUCHDB-1302. I saw "Unassigned" and read "Unresolved.")

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to