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

Randall Leeds closed COUCHDB-410.
---------------------------------

    Resolution: Fixed

Incorporated into COUCHDB-111.
                
> JavaScript errors in validate_doc_update should be handled more gracefully
> --------------------------------------------------------------------------
>
>                 Key: COUCHDB-410
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-410
>             Project: CouchDB
>          Issue Type: Bug
>          Components: Database Core
>    Affects Versions: 0.9.1, 0.10
>            Reporter: Jason Davies
>             Fix For: 1.3
>
>         Attachments: util.js.diff, 
> v1-0001-COUCHDB-410-graceful-validate_doc_update-errors.patch, 
> v2-0001-COUCHDB-410-graceful-validate_doc_update-errors.patch
>
>
> For example, if I create validate_doc_update:
> function (oldDoc, newDoc, userCtx) {
>   doc.foo;
> }
> I am greeted by an "OS process timed out" message.  In the logs, all I see is:
> OS Process :: Error converting object to JSON: TypeError: {Array:function (v) 
> {var buf = [];for (var i = 0; i < v.length; i++) 
> {buf.push(toJSON(v[i]));}return "[" + buf.join(",") + "]";}, Boolean:function 
> (v) {return v.toString();}, Date:function (v) {var f = function (n) {return n 
> < 10 ? "0" + n : n;};return "\"" + v.getUTCFullYear() + "-" + 
> f(v.getUTCMonth() + 1) + "-" + f(v.getUTCDate()) + "T" + f(v.getUTCHours()) + 
> ":" + f(v.getUTCMinutes()) + ":" + f(v.getUTCSeconds()) + "Z\"";}, 
> Number:function (v) {return isFinite(v) ? v.toString() : "null";}, 
> Object:function (v) {if (v === null) {return "null";}var buf = [];for (var k 
> in v) {if (!v.hasOwnProperty(k) || typeof k !== "string" || v[k] === 
> undefined) {continue;}buf.push(toJSON(k, val) + ": " + toJSON(v[k]));}return 
> "{" + buf.join(",") + "}";}, String:function (v) {if 
> (/["\\\x00-\x1f]/.test(v)) {v = v.replace(/([\x00-\x1f\\"])/g, function (a, 
> b) {var c = subs[b];if (c) {return c;}c = b.charCodeAt();return "\\u00" + 
> Math.floor(c / 16).toString(16) + (c % 16).toString(16);});}return "\"" + v + 
> "\"";}}[val != null ? val.constructor.name : "Object"] is not a function
> When really the problem is a ReferenceError (I should have used newDoc.foo or 
> oldDoc.foo).  The attached patch modifies toJSON() in utils.js so that it 
> converts anything that isn't a String, Array, Date, Object etc. into a 
> String.  This makes the error appear in the popup in Futon when saving.
> This isn't necessarily the best thing to do as it modifies the semantics of 
> toJSON(), and also we might want to keep the exception info in the logs, and 
> not propagate it to the user.  Perhaps it would be better to modify 
> respond(obj) to produce a better error message in the logs (simply adding 
> something that tried to log obj.toString() would suffice).

--
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