Tcl Source Code

View Ticket
Login
Ticket UUID: 6a71dbe6ece710a81d6188ff8075ce4d1dc6b89a
Title: http encoding error not brought up
Type: Bug Version: 8.6.4
Submitter: oehhar Created on: 2015-05-12 15:58:18
Subsystem: 29. http Package Assigned To: nobody
Priority: 5 Medium Severity: Minor
Status: Closed Last Modified: 2018-05-15 21:04:40
Resolution: Fixed Closed By: oehhar
    Closed on: 2018-05-15 21:04:40
Description:

As found out by Luc Monier on clt https://groups.google.com/forum/#!topic/comp.lang.tcl/B6afDJQg8LA, the following http request fails 8.6 and succeeded on 8.5:

% package require http
2.8.8
% set organism_name "nipah"
nipah
% set xml "
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<orgPdbQuery>
 <version>B0905</version>
 <queryType>org.pdb.query.simple.OrganismQuery</queryType>
 <description>Organism Search : Organism Name=$organism_name </description>
 <organismName>$organism_name</organismName>
</orgPdbQuery>
"

% set url "http://www.rcsb.org/pdb/rest/search" 

% ::http::config -urlencoding utf-8

% set tok [::http::geturl $url -query $xml -type "application/x-www-form-urlencoded"]
can't read "coding": no such variable

The following patch is a first step to bring up the real error message:

--- http-2.8.8.tm
+++ http-2.8.9.tm
@@ -11,7 +11,7 @@
 package require Tcl 8.6
 # Keep this in sync with pkgIndex.tcl and with the install directories in
 # Makefiles
-package provide http 2.8.8
+package provide http 2.8.9
 
 namespace eval http {
     # Allow resourcing to not clobber existing data
@@ -1299,7 +1299,7 @@
 		set state(body) [zlib $coding $state(body)]
 	    }
 	} err]} {
-	    Log "error doing $coding '$state(body)'"
+	    Log "error doing coding '$state(body)' : $err"
 	    return [Finish $token $err]
 	}

If this patch is applied, the output is as follows:

... init as above
% proc http::Log args {puts **$args}

% set tok [::http::geturl $url -query $xml -type "application/x-www-form-urlencoded"]
**{Using sock02E7DC30 for www.rcsb.org:80} {}
**{error doing coding '1WP7
2VSM
2VWD
3D11
3D12
3N27
4CO6
4GJW
4N5B
' : unsupported content-encoding "text/plain"}
**{Closing socket sock02E7DC30 (no connection info)}

Ok, "text/plain" missing in coding tables. Thus patch:

@@ -1473,6 +1473,7 @@
 		gzip - x-gzip { lappend r gunzip }
 		compress - x-compress { lappend r decompress }
 		identity {}
+		text/plain {}
 		default {
 		    return -code error "unsupported content-encoding \"$coding\""
 		}

This gives the desired result:

... init as above
% proc http::Log args {puts **$args}
% set tok [::http::geturl $url -query $xml -type "application/x-www-form-urlencoded"]
**{Using sock02E63980 for www.rcsb.org:80} {}
**{Closing socket sock02E63980 (no connection info)}
::http::3
% set rep [::http::data $tok]
1WP7
2VSM
2VWD
3D11
3D12
3N27
4CO6
4GJW
4N5B

I am not sure what I am doing. The patch just looks reasonable for the case.

Thank you, Harald

User Comments: dkf added on 2015-05-14 08:27:50:

I've also stopped it showing the body there; if that's containing compressed data, there's really no way that's going to display properly anywhere.


dkf added on 2015-05-14 08:26:12:

I've fixed the error handling. It now produces the (correct) error message:

unsupported content-encoding "text/plain"
I don't plan to "fix" that. Sometimes things are just really badly broken and need to be called out as such.


dkf added on 2015-05-13 23:42:23:

That's a very broken webservice. But maybe we should improve our error handling.


dgp added on 2015-05-13 23:34:10:
Good catch on the programming error in the [Log].

For the actual error, I'm far from an HTTP expert, but
is text/plain really the name of a valid ContentEncoding
value?

I thought that was a ContentType ?

Are we adding to the list of ways this service is broken?