Ticket UUID: | 3498327 | |||
Title: | http::formatQuery RFC 3986 compliance, AWS Compatibility fix | |||
Type: | Patch | Version: | None | |
Submitter: | samoconnor | Created on: | 2012-03-07 07:17:48 | |
Subsystem: | 29. http Package | Assigned To: | andreas_kupries | |
Priority: | 3 Low | Severity: | ||
Status: | Closed | Last Modified: | 2012-03-08 02:01:05 | |
Resolution: | Fixed | Closed By: | andreas_kupries | |
Closed on: | 2012-03-07 19:01:05 | |||
Description: |
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.orig2012-03-07 17:57:05.000000000 +1100 +++ tcl8.6b1/library/http/http.tcl2012-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] } | |||
User Comments: |
andreas_kupries added on 2012-03-08 02:01:05:
allow_comments - 1 andreas_kupries added on 2012-03-08 02:01:04: Committed changes to all branches. Including updated tests. Including the %0d/%0a change. andreas_kupries added on 2012-03-08 01:19:00: Question, what about the command set map(\n) %0d%0a a few lines below. Should that not also be changed, to %0D%0A ? |