hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Christopher Klein (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HTTPCLIENT-1686) Threadsafe CloseableHttpClient uses non-threadsafe NTLMScheme, causing errors
Date Tue, 13 Oct 2015 18:12:05 GMT

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

Christopher Klein commented on HTTPCLIENT-1686:
-----------------------------------------------

I looked into HTTPCLIENT-1557 and the corresponding commit at https://github.com/apache/httpclient/commit/b47a2333bf02c214928907b27582a256586684b7.
The code has been changed in the assumption no further write request occurs for the Type1Message.
But a write request does happen when NTLMMessage.addBytes() is called - as it can be seen
in the stack trace of this issue.

As far as I understand, the code refactoring of HTTPCLIENT-1557 introduced an unnecessary
threading issue which has been originally intended as a simplification of the code.

> Threadsafe CloseableHttpClient uses non-threadsafe NTLMScheme, causing errors
> -----------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1686
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1686
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 4.5.1
>         Environment: Java/OSX
>            Reporter: Jim Cassidy
>
> The class org.apache.http.impl.client.CloseableHttpClient is marked as thread safe, but
it may use org.apache.http.impl.auth.NTLMScheme during authentication (in this case, to Exchange's
Exchange Web Services).  NLTMScheme is not thread safe, and concurrent access can result in
a crash when multiple threads access and modify the static NTLMEngineImpl Type1Message static
private member, see stack trace below.
> I've verified a fix for this particular issue by removing the static Type1Message object
and allocating a new one for each call to NTLMEngineImpl.getType1Message, but that's not necessarily
sufficient to mark NTLMScheme as ThreadSafe.
> Stack trace:
> {noformat}
> Java.lang.ArrayIndexOutOfBoundsException: 40
> 0 = {StackTraceElement@8714} "org.apache.http.impl.auth.NTLMEngineImpl$NTLMMessage.addByte(NTLMEngineImpl.java:911)"
> 1 = {StackTraceElement@8715} "org.apache.http.impl.auth.NTLMEngineImpl$NTLMMessage.addULong(NTLMEngineImpl.java:941)"
> 2 = {StackTraceElement@8716} "org.apache.http.impl.auth.NTLMEngineImpl$Type1Message.getResponse(NTLMEngineImpl.java:1048)"
> 3 = {StackTraceElement@8717} "org.apache.http.impl.auth.NTLMEngineImpl.getType1Message(NTLMEngineImpl.java:148)"
> 4 = {StackTraceElement@8718} "org.apache.http.impl.auth.NTLMEngineImpl.generateType1Msg(NTLMEngineImpl.java:1628)"
> 5 = {StackTraceElement@8719} "org.apache.http.impl.auth.NTLMScheme.authenticate(NTLMScheme.java:139)"
> 6 = {StackTraceElement@8720} "org.apache.http.impl.auth.AuthSchemeBase.authenticate(AuthSchemeBase.java:138)"
> 7 = {StackTraceElement@8721} "org.apache.http.impl.auth.HttpAuthenticator.doAuth(HttpAuthenticator.java:239)"
> 8 = {StackTraceElement@8722} "org.apache.http.impl.auth.HttpAuthenticator.generateAuthResponse(HttpAuthenticator.java:202)"
> 9 = {StackTraceElement@8723} "org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:262)"
> 10 = {StackTraceElement@8724} "org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)"
> 11 = {StackTraceElement@8725} "org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)"
> 12 = {StackTraceElement@8726} "org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)"
> 13 = {StackTraceElement@8727} "org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)"
> 14 = {StackTraceElement@8728} "org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)"
> 15 = {StackTraceElement@8729} 
> {noformat}



--
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