Travis Paul created COUCHDB-1635:
------------------------------------
Summary: 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: Futon, HTTP Interface
Reporter: Travis Paul
CouchDB crashed when trying to throw the following objects from a
validate_doc_update function:
throw({forbidden: [{}] });
// will attach: forbidden_crash_report.txt
throw({unauthorized : [{}] });
// will attach: 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