[ 
https://issues.apache.org/jira/browse/COUCHDB-1635?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexander Shorin updated COUCHDB-1635:
--------------------------------------

    Component/s:     (was: Futon)
                     (was: HTTP Interface)
                 JavaScript View Server
    
> Error handling code in validate_doc_update assumes a string for the error 
> value
> -------------------------------------------------------------------------------
>
>                 Key: COUCHDB-1635
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1635
>             Project: CouchDB
>          Issue Type: Bug
>          Components: JavaScript View Server
>    Affects Versions: 1.0.3
>         Environment: CentOS 6.3 x86_64 (CouchDB RPM from EPEL)
>            Reporter: Travis Paul
>         Attachments: forbidden_crash_report.txt, unauthorized_crash_report.txt
>
>
> CouchDB crashed when trying to throw the following objects from a 
> validate_doc_update function:
> throw({forbidden: [{}] });
> // see: forbidden_crash_report.txt
> throw({unauthorized : [{}] });
> // see: unauthorized_crash_report.txt
> It seems that the CouchDB error handling code assumes a string for the
> error value, futon does this as well.
> Robert Newson responded to me on the mailing list with:
> I can easily believe our error handling code assumes a string for the
> error value. File a JIRA ticket?
> error_info({Error, Reason}) when is_list(Reason) ->
>     error_info({Error, ?l2b(Reason)});
> This clause assumes, erroneously, that a list is really a string and
> so converts it to a binary. In this case, the list contains objects.
>  
> I decided to run some more tests before filing a bug:
> throw({forbidden: [] });
> // {"error":"forbidden","reason":""}
> throw({forbidden: {} }); 
> // {"error":"forbidden","reason":{}}
> // futon reports: Error: unauthorized [object Object]
> throw({unauthorized : [] });
> // {"error":"unauthorized","reason":""}
> throw({unauthorized : {} });
> // {"error":"unauthorized","reason":{}}
> // futon reports:  Error: unauthorized [object Object]
> throw({ foo: [{}] });
> // I'm not quite sure what to make of this result:
> // {"error":"case_clause","reason":"{[{<<\"foo\">>,[{[]}]}]}"}
> But I'm not 100% sure this is a bug, it may actually be somewhat of a feature 
> request as it seems Futon expects strings and the Definitive Guide suggests 
> this is expected behavior:
> "When you’re trying to prevent an authorized user from saving invalid data, 
> use this:
> throw({forbidden : message});"
> However crashing and not sending a response suggest that it is a bug.
> My use case is that I am trying to return an array of json-schema errors with 
> all of the validation errors instead of a single message.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to