#634 http::formatQuery RFC 3986 compliance, AWS Compatibility fix


http://tools.ietf.org/html/rfc3986 2.1. says:
"... URI producers and normalizers should use uppercase hexadecimal digits for all percent-encodings."

The patch below fixes the encoding map created in http::init to use uppercase hex digits.
Lower case hex encoding currently produced by Tcl's http:: causes at least one Amazon AWS authentication scheme to fail.
As it stands, every Tcl AWS tool has to implement its own special url encoder (e.g. tclib::3S, tclcloud, etc).
With this patch http::formatQuery can be used to prepare AWS requests.

See http://docs.amazonwebservices.com/AWSSimpleQueueService/2011-10-01/SQSDeveloperGuide/Query_QueryAuth.html.

--- tcl8.6b1/library/http/http.tcl.orig 2012-03-07 17:57:05.000000000 +1100
+++ tcl8.6b1/library/http/http.tcl 2012-03-07 17:57:15.000000000 +1100
@@ -39,7 +39,7 @@
for {set i 0} {$i <= 256} {incr i} {
set c [format %c $i]
if {![string match {[-._~a-zA-Z0-9]} $c]} {
- set map($c) %[format %.2x $i]
+ set map($c) %[format %.2X $i]
# These are handled specially

In the meantime the following "dynamic" patch serves a work-around:

dict for {n v} $::http::formMap {
dict set ::http::formMap $n [string toupper $v]


  • Andreas Kupries

    Andreas Kupries - 2012-03-07

    Question, what about the command

    set map(\n) %0d%0a

    a few lines below. Should that not also be changed, to %0D%0A ?

  • Andreas Kupries

    Andreas Kupries - 2012-03-07
    • priority: 5 --> 3
    • assigned_to: patthoyts --> andreas_kupries
    • status: open --> open-accepted
  • Andreas Kupries

    Andreas Kupries - 2012-03-07

    Committed changes to all branches. Including updated tests. Including the %0d/%0a change.

  • Andreas Kupries

    Andreas Kupries - 2012-03-07
    • status: open-accepted --> closed-fixed

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

No, thanks