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

Clinton Nielsen commented on HTTPCLIENT-1152:
---------------------------------------------

Could be that somebody is using the cache for other purposes as well, and just 
happens to set an object with a URL as a key that conflicts with an object that 
is set by MemcachedHttpCacheStorage.
 -- this could (and also probably should) be mitigated by allowing the client 
of MemcachedHttpCacheStorage to set a client-defined prefix String that will be 
prefixed to all keys, thus avoiding potential collisions.


In my case, it is that we are using jmemcacheddaemon for local testing 
purposes, and (unfortunately) jmemcacheddaemon has a known bug where cache 
misses return an empty string instead of a null object. This causes 
MemcachedHttpCacheStorage to throw a ClassCastException instead of just 
returning null, because String cannot be cast to byte[].
                
> org.apache.http.impl.client.cache.memcached.MemcachedHttpCacheStorage should 
> verify class of returned object before casting
> ---------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1152
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1152
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: Cache, HttpClient
>    Affects Versions: 4.1.1
>            Reporter: Clinton Nielsen
>            Assignee: Jon Moore
>             Fix For: 4.1.3, 4.2 Final
>
>         Attachments: HTTPCLIENT-1152.patch
>
>
> org.apache.http.impl.client.cache.memcached.MemcachedHttpCacheStorage
> Original (in getEntry function): 
>   byte[] data = (byte[]) client.get(url);
> Should be:
>   Object obj= client.get(url);
>   if (null == obj || !(objinstanceof byte[])) {
>     return null;
>   }
>   byte[] data = (byte[])obj;
> Original (in updateEntry function):
>   byte[] oldBytes = (v != null) ? (byte[]) v.getValue() : null;
> Should be:
>   byte[] oldBytes = (v != null && (v.getValue() instanceof byte[])) ? 
> (byte[]) v.getValue() : null;
>   

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to