hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gary Gregory (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HTTPCORE-438) Got a java.nio.charset.UnsupportedCharsetException error while the header value consist a charset binary
Date Sat, 03 Dec 2016 19:54:58 GMT

    [ https://issues.apache.org/jira/browse/HTTPCORE-438?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15718644#comment-15718644
] 

Gary Gregory commented on HTTPCORE-438:
---------------------------------------

[~nhan.thuan.nguyen],

I understand the desire to avoid having this library not blow up on garbage input under lenient
mode. You should consider that it is likely than even with this allowance, the library would
blow up elsewhere due to this input. Therefore I'd like to propose that you come up with a
patch with unit tests that would satisfy your use case while not causing any regressions.
The community can then discuss something concrete. 

I understand the desire to follow the RFCs, but it could also be considered reasonable to
provide extensions to our leniency mode.

2c,
Gary



> Got a java.nio.charset.UnsupportedCharsetException error while the header value consist
a charset binary
> --------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCORE-438
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-438
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore
>    Affects Versions: 4.4.5
>            Reporter: Nhan Thuan Nguyen
>
> Got a java.nio.charset.UnsupportedCharsetException error while the header value consist
a charset binary (see below). Since the method in org.apache.http.entity.ContentType.get()
is hard coded boolean value true for strict param, the method in org.apache.http.entity.ContentType.create()
throw the UnsupportedCharsetException.
> Can strict param be pass in from a system property, -Dorg.apache.http.entity.contenttype.strict=false?
If not set, then set it to true as default.
> Content-Type: image/jpeg; charset=binary; name="image_42Colk06m1oO0xfC"
> Caused by: java.nio.charset.UnsupportedCharsetException: binary
>         at java.nio.charset.Charset.forName(Charset.java:531)
>         at org.apache.http.entity.ContentType.create(ContentType.java:224)
>         at org.apache.http.entity.ContentType.create(ContentType.java:214)
>         at org.apache.http.entity.ContentType.get(ContentType.java:299)
>         at org.apache.http.entity.ContentType.getOrDefault(ContentType.java:346)
>         at org.apache.http.nio.protocol.AbstractAsyncResponseConsumer.responseReceived(AbstractAsyncResponseConsumer.java:130)
>         at org.apache.http.impl.nio.client.MainClientExec.responseReceived(MainClientExec.java:315)
>         at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.responseReceived(DefaultClientExchangeHandlerImpl.java:147)
>         at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.responseReceived(HttpAsyncRequestExecutor.java:303)
>         at org.apache.http.impl.nio.client.InternalRequestExecutor.responseReceived(InternalRequestExecutor.java:108)
>         at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:255)
>         at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81)
>         at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39)
>         at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:121)
>         at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162)
>         at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337)
>         at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
>         at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276)
>         at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
>         at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:588)
> public static ContentType get(
>             final HttpEntity entity) throws ParseException, UnsupportedCharsetException
{
>         if (entity == null) {
>             return null;
>         }
>         final Header header = entity.getContentType();
>         if (header != null) {
>             final HeaderElement[] elements = header.getElements();
>             if (elements.length > 0) {
>                 return create(elements[0], true);
>             }
>         }
>         return null;
>     }
> private static ContentType create(final String mimeType, final NameValuePair[] params,
final boolean strict) {
>         Charset charset = null;
>         for (final NameValuePair param: params) {
>             if (param.getName().equalsIgnoreCase("charset")) {
>                 final String s = param.getValue();
>                 if (!TextUtils.isBlank(s)) {
>                     try {
>                         charset =  Charset.forName(s);
>                     } catch (final UnsupportedCharsetException ex) {
>                         if (strict) {
>                             throw ex;
>                         }
>                     }
>                 }
>                 break;
>             }
>         }
>         return new ContentType(mimeType, charset, params != null && params.length
> 0 ? params : null);
>     }



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org


Mime
View raw message