Bug 49458

Summary: StorageResolver always exhausted after first use
Product: Security - Now in JIRA Reporter: Clement Pellerin <Clement_Pellerin>
Component: EncryptionAssignee: XML Security Developers Mailing List <security-dev>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P2    
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Windows NT   
Bug Depends on: 49456    
Bug Blocks:    
Attachments: source code patch with augmented junit

Description Clement Pellerin 2010-06-17 12:22:57 UTC
Created attachment 25608 [details]
source code patch with augmented junit

The StorageResolver creates an iterator once and always returns the same
iterator afterwards. After the iterator is traversed once, it will always
appear empty. Even if the implementation would be changed to reset the iterator to the beginning, the single iterator instance approach will never
be thread-safe.

To reproduce use the junit in attachment.

The solution is to return a new iterator each time.
Since the methods StorageResolver.hasNext() and StorageResolver.next() cannot use this solution, they have been marked deprecated.
The KeyResolvers have been changed to call StorageResolver.getIterator() instead.

This patch assumes the patch in Bug 49456 has already been applied.
Comment 1 coheigea 2010-06-18 07:20:43 UTC
Patch applied, thanks.

Colm.