couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jason Smith (JIRA)" <>
Subject [jira] Updated: (COUCHDB-815) Non-standard HTTP methods for view handlers (AKA WebDAV is b0rken) [PATCH]
Date Mon, 05 Jul 2010 07:22:51 GMT


Jason Smith updated COUCHDB-815:

    Attachment: allow_http_method_convert_to_binary.patch

Upon further investigation, I believe there is a bug in couch_util:to_existing_atom. The comment
says that it will return the original value if no atom exists. But why does it throw an exception

The attached patch properly catches the error:badarg thrown by the *_to_existing_atom BIFs.
This allows the method parameter to remain a string 

Unfortunately, methods of string (list) type are converted to a list-of-integers when sending
to the view server. Therefore couch_httpd_external:json_req_obj must go ahead and 

I like this patch:
* It does as little as possible at the early stage, when the request comes in
* It does not convert unknown requests to atoms--pattern matching will keep them away from
existing code
* Yet it correctly forwards unknown methods to the view server _show et al whether standard
or not

> Non-standard HTTP methods for view handlers (AKA WebDAV is b0rken) [PATCH]
> --------------------------------------------------------------------------
>                 Key: COUCHDB-815
>                 URL:
>             Project: CouchDB
>          Issue Type: Bug
>          Components: Database Core
>    Affects Versions: 1.0
>            Reporter: Jason Smith
>            Priority: Minor
>         Attachments: allow_http_method_convert_to_binary.patch, bad_allow_any_http_method.patch
> CouchDB prevents the new view server handler methods, _show, _update, etc. from handling
unknown HTTP methods. This prevents Couch apps from being able to implement extensions to
the HTTP specification or to add application-specific methods to HTTP, violating the spirit
of _show and _update.
> For example, it is not possible to make a CouchApp WebDAV server because _show and _list
must support the PROPFIND method.
> In couch_httpd:handle_request_int/5, the response from Mochi is coerced to an atom if
and only if the atom already exists (using couch_util:to_existing_atom/1). That is an odd
whitelist, to say the least:
>     $ curl localhost:5984 -X PROPFIND # Crashes mochiweb when to_existing_atom throws
>     curl: (52) Empty reply from server
>     $ curl localhost:5984 -X list_to_binary # Any atom works
>     {"error":"method_not_allowed","reason":"Only GET,HEAD allowed"}
> Considering the cURL commands above, I filed this as a bug, not a feature. I will explore
some options and submit patches.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message