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

Robert Newson commented on COUCHDB-2748:
----------------------------------------

Hrm, ok here we go again.

Looking over it, it does seem wrong that;

curl -XPUT -sv 'http://foo:[email protected]:15984/db1/%' -d '{}'
and
curl -XPUT -sv 'http://foo:[email protected]:15984/db1/%25' -d '{}'

create the same document.

So...

1. we should follow the standard rules for url encoding of the db name, doc id 
and attachment name in all url's. In this case, we'd reject the first of my 
curls as invalid since % is not followed by two characters as required.
2. we continue to not URL encode any of those three properties, or any other, 
in JSON request or response bodies.

The ticket muddled a few issues together which made it harder to see the 
fundamental one.


> encoding problems with reserved chars
> -------------------------------------
>
>                 Key: COUCHDB-2748
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-2748
>             Project: CouchDB
>          Issue Type: Bug
>          Components: Database Core
>            Reporter: Robert Kowalski
>
> Let's create a database!
> {noformat}
> curl -X PUT http://localhost:5984/testrainyday
> {noformat}
> I get:  {{{"ok":true}}}
> Let's create a document called BANANA%253A21%25
> {noformat}
> curl -X PUT http://localhost:5984/testrainyday/BANANA%253A21%25 -d '{}'
> {noformat}
> CouchDB returns:
> {noformat}
> {"_id":"BANANA%3A21%","_rev":"1-967a00dff5e02add41819138abb3284d"}
> {noformat}
> (note the changed id - it misses the 25)
> lets use the id from the response to retrieve the doc:
> {noformat}
> curl http://localhost:5984/testrainyday/BANANA%3A21%
> {noformat}
> i get:
> {noformat}
> {"error":"not_found","reason":"missing"}
> {noformat}
> :(
> New try:
> curl http://localhost:5984/testrainyday/_all_docs
> returns:
> {noformat}
> {"total_rows":1,"offset":0,"rows":[
> {"id":"BANANA%3A21%","key":"BANANA%3A21%","value":{"rev":"1-967a00dff5e02add41819138abb3284d"}}
> ]}
> {noformat}
> I get BANANA%3A21% as id again, but when I want to curl it or use in my JS 
> application, I get `{"error":"not_found","reason":"missing"}`
> I noticed that it works for these two ids:
> curl -X PUT http://localhost:5984/testrainyday/BANANA%25 -d '{}'
> {noformat}
> {"ok":true,"id":"BANANA%","rev":"1-967a00dff5e02add41819138abb3284d"}
> {noformat}
> In this last case it works magically for both ids:
> {noformat}
> (17:54:11) [robert@tequila-work] ~ $ curl -X PUT 
> http://localhost:5984/testrainyday/BANANA%25 -d '{}'
> {"ok":true,"id":"BANANA%","rev":"1-967a00dff5e02add41819138abb3284d"}
> (17:55:45) [robert@tequila-work] ~ $ curl 
> http://localhost:5984/testrainyday/BANANA%25
> {"_id":"BANANA%","_rev":"1-967a00dff5e02add41819138abb3284d"}
> (17:55:57) [robert@tequila-work] ~ $ curl 
> http://localhost:5984/testrainyday/BANANA%
> {"_id":"BANANA%","_rev":"1-967a00dff5e02add41819138abb3284d"}
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to