Uploaded image for project: 'CouchDB'
  1. CouchDB
  2. COUCHDB-1697

if-none-match header causes 500 internal server error on CORS requests

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Blocker
    • Resolution: Fixed
    • Affects Version/s: 1.3
    • Fix Version/s: 1.3
    • Component/s: HTTP Interface
    • Labels:
      None

      Description

      Browsers can send a if-none-match header to couchdb, but this can will break when CORS is enabled. The reason seems to be the header comes in as a binary, eg from the debug log the header is:

      {'If-None-Match',"\"V9J3604P4V9VTR5H77SBHJW\""}

      ,

      When maybe_apply_cors_headers is called, the assumption is that the headers are strings. This can be seen here: https://github.com/apache/couchdb/blob/b0420f9006915149e81607615720f32f21c76725/src/couchdb/couch_httpd_cors.erl#L219

      Thus a string:to_lower is undefined as can be seen in this stacktrace:

      [info] [<0.148.0>] Stacktrace: [{string,to_lower,
      [undefined],
      [

      {file,"string.erl"}

      ,

      {line,468}

      ]},
      {couch_httpd_cors,maybe_apply_cors_headers,2,
      [

      {file, "/Users/jan/Work/build-couchdb-mac/build-couchdb/git-build/https%3A%2F%2Fgit-wip-us.apache.org%2Frepos%2Fasf%2Fcouchdb.git%3A06c3f351f158f107a8293c7c6c9b2415b942f0e9/src/couchdb/couch_httpd_cors.erl"}

      ,

      {line,219}

      ]},
      {couch_httpd,send_response,4,
      [{file,

      See original gist https://gist.github.com/ryanramage/5143964#file-gistfile1-txt-L64

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                ryanramage Ryan Ramage
                Reporter:
                ryanramage Ryan Ramage
              • Votes:
                0 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: