You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Dennis Kieselhorst (JIRA)" <ji...@apache.org> on 2018/08/30 10:21:00 UTC

[jira] [Assigned] (CXF-7824) CacheMap may have spurious null keys

     [ https://issues.apache.org/jira/browse/CXF-7824?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Dennis Kieselhorst reassigned CXF-7824:
---------------------------------------

    Assignee: Dennis Kieselhorst

> CacheMap may have spurious null keys
> ------------------------------------
>
>                 Key: CXF-7824
>                 URL: https://issues.apache.org/jira/browse/CXF-7824
>             Project: CXF
>          Issue Type: Bug
>    Affects Versions: 3.2.6
>            Reporter: Michał Pachucki
>            Assignee: Dennis Kieselhorst
>            Priority: Major
>             Fix For: 3.3.0
>
>
> Hello,
> I was debugging a bug in my code and by accident I found a bug in CacheMap.
>  
> The function updateMainDataMap copies elements from extraKeyMap to mainDataMap but does not make sure that keys are not null.
> It is possible that entrySet of WeakIdentityHashMap will return null keys.
> {code:java}
> public Set<Map.Entry<K, V>> entrySet() {
>     reap();
>     Set<Map.Entry<K, V>> ret = new HashSet<Map.Entry<K, V>>();
>     for (Map.Entry<IdentityWeakReference, V> ref : backingStore.entrySet()) {
>         final K key = ref.getKey().get(); //possible null here
>         final V value = ref.getValue();
>         Map.Entry<K, V> entry = new Map.Entry<K, V>() {
>             public K getKey() {
>                 return key;
>             }
>             public V getValue() {
>                 return value;
>             }
>             public V setValue(V value) {
>                 throw new UnsupportedOperationException();
>             }
>         };
>         ret.add(entry);
>     }
>     return Collections.unmodifiableSet(ret);
> }{code}
> On entrance the function clears all null keys (in the reap() functon) and then iterates over backingStore. But it is possible that after reap() a key is garbage collected and its WeakReference will return null (ref.getKey().get()).
> This causes a spurious null key.
>  
> I gave this case a Major priority because this class is used by WSDLManagerImpl, and spurious null keys cause serious problems there. I can reproduce this problem in a few minutes of testing. The testcase consists of creating generated service over and over again by multiple threads. Unfortunately the testcase itself is too big to share.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)