You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Colm O hEigeartaigh (JIRA)" <ji...@apache.org> on 2018/10/30 10:06:05 UTC
[jira] [Closed] (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 ]
Colm O hEigeartaigh closed CXF-7824.
------------------------------------
> 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.2.7, 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)