Thanks! Let me know what your opinion is, after you get a chance to look it 
over.

Matthew.

On Wed, Mar 27, 2013 at 05:25:03PM +0000, Rob McKenna wrote:
> HI Matthew,
> 
> On the face of it this makes sense. I don't have time to dig into it
> this week, but I'll get stuck into it next week and get a fix
> together.
> 
>     -Rob
> 
> On 27/03/13 00:42, Matthew Hall wrote:
> >Forgot to include, offending code in HttpURLConnection:
> >
> >if (!method.equals("PUT") && (poster != null || streaming()))
> >     requests.setIfNotSet ("Content-type", 
> > "application/x-www-form-urlencoded");
> >
> >Format adjusted a bit for readability.
> >
> >Matthew.
> >
> >On Tue, Mar 26, 2013 at 05:33:15PM -0700, Matthew Hall wrote:
> >>Hello,
> >>
> >>I was working on a situation which was similar to the situation described in
> >>this bug which was supposedly fixed in Java 5 and Java 6:
> >>
> >>http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6369510
> >>
> >>The bug described how Content-Type was being auto-set to
> >>application/x-www-form-urlencoded in cases where it should not be.
> >>
> >>I was seeing this problem, where the open-source JSCEP library was creating 
> >>a
> >>request to a Tomcat servlet I am implementing, which Tomcat was rejecting 
> >>due
> >>to encoding issues in the POST body.
> >>
> >>When I looked at the traffic using Wireshark TCP Stream reassembly I
> >>discovered that the request had the URL-encoded content type even though no
> >>code in JSCEP requested this.
> >>
> >>Upon reading through the unit test,
> >>openjdk-7/jdk/test/sun/net/www/protocol/http/B6369510.java, I found a couple
> >>of issues:
> >>
> >>1) The test fails if you have an IPv6 address configured on the system,
> >>because the code doesn't enclose the IPv6 literal with '[]':
> >>
> >>URL url = new URL("http://"; + address.getHostName() + ":" + 
> >>address.getPort() + "/test/");
> >>
> >>java.net.MalformedURLException: For input string: "0:0:0:0:0:0:0:40392"
> >>         at java.net.URL.<init>(URL.java:601)
> >>         at java.net.URL.<init>(URL.java:464)
> >>         at java.net.URL.<init>(URL.java:413)
> >>         at B6369510.doClient(B6369510.java:63)
> >>         at B6369510.<init>(B6369510.java:52)
> >>         at B6369510.main(B6369510.java:45)
> >>
> >>2) There appears to be a logic error in the test, or the fix and the bug
> >>description do not match:
> >>
> >>if (requestMethod.equalsIgnoreCase("GET") && ct != null &&
> >>     ct.get(0).equals("application/x-www-form-urlencoded"))
> >>     t.sendResponseHeaders(400, -1);
> >>
> >>else if (requestMethod.equalsIgnoreCase("POST") && ct != null &&
> >>          !ct.get(0).equals("application/x-www-form-urlencoded"))
> >>     t.sendResponseHeaders(400, -1);
> >>
> >>This code is saying, the unit test will fail if the method is GET, and the
> >>content-type is equal to url-encoded, and the unit test will fail if the
> >>method is POST, and the content-type is *NOT* equal to url-encoded.
> >>
> >>But, in the evaluation, the bug states, "Content-Type is being set to
> >>application/x-www-form-urlencoded for all HttpURLConnections requests other
> >>than PUT requests. This is not necessary and could even cause problems for
> >>some servers. We do not need to set this content-type for GET requests."
> >>
> >>To me this means, the code should not be setting the Content-Type to 
> >>anything,
> >>on any type of request, because it will cause problems across the board.
> >>
> >>So I think that the test and the bug fix do not actually fix the original 
> >>bug
> >>correctly, and the test needs to be fixed so it will work right on an IPv6
> >>based system.
> >>
> >>Thoughts?
> >>Matthew Hall.
> 

Reply via email to