Skip to content

easy-handler errors out when raw bytes are passed as URL parameters #226

@Kevinpgalligan

Description

@Kevinpgalligan

I'm running a dummy easy-handler that's just supposed to return a string, no matter what parameters I pass.

(hunchentoot:define-easy-handler (handle-announce :uri "/announce") ()
  "some string")

However, it returns a 400 when I request this URL:

http://127.0.0.1:4242/announce?field=%27%10%C5

I've confirmed that the issue is URL decoding -- it's trying to convert the raw bytes under the field parameter to UTF-8. This:

(hunchentoot::url-decode "http://127.0.0.1:4242/announce?field=%27%10%C5")

Causes the following error:

This sequence can't be decoded using UTF-8 as it is too short.  1 octet missing at the end.
   [Condition of type FLEXI-STREAMS:EXTERNAL-FORMAT-ENCODING-ERROR]
[...]
Backtrace:
  0: (FLEXI-STREAMS::SIGNAL-ENCODING-ERROR #<FLEXI-STREAMS::FLEXI-UTF-8-FORMAT (:UTF-8 :EOL-STYLE :LF) {1002051D53}> "This sequence can't be decoded ~ ..)
  1: ((:METHOD FLEXI-STREAMS::CHECK-END (T T T T)) #<unavailable argument> #<unused argument> #<unavailable argument> #<unavailable argument>) [fast-method]
  2: ((:METHOD FLEXI-STREAMS::COMPUTE-NUMBER-OF-CHARS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) #<unavailable argument> #<unavailable argument> #<unavailable argument> #<unavailable argument>) [fast-metho..
  3: ((:METHOD FLEXI-STREAMS::OCTETS-TO-STRING* (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T T T)) #<FLEXI-STREAMS::FLEXI-UTF-8-FORMAT (:UTF-8 :EOL-STYLE :LF) {1002051D53}> #(104 116 116 112 58 47 ...) #<unavailab..

For context, part of the BitTorrent protocol sends raw bytes through URL parameters, which is how I ran into this issue.

Is this expected behaviour of Hunchentoot?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions