[
https://issues.apache.org/jira/browse/DIRSERVER-256?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Emmanuel Lecharny closed DIRSERVER-256.
---------------------------------------
Closing all issues created in 2005 and before which are marked resolved
> SchemaService modifies attibute while checking for removal of last attribute
> value
> ----------------------------------------------------------------------------------
>
> Key: DIRSERVER-256
> URL: https://issues.apache.org/jira/browse/DIRSERVER-256
> Project: Directory ApacheDS
> Issue Type: Bug
> Affects Versions: pre-1.0
> Reporter: Claus Turkalj
> Assigned To: Alex Karasulu
> Fix For: 1.0-RC1
>
>
> The SchemaService is modifying an attribute although it is not the last
> interceptor in the interceptor chain. If one of the interceptors invoked
> after the SchemaService throws an exception, the modification has already
> been commited.
> The modification happens while the SchemaService checks if a
> DirContext.REMOVE_ATTRIBUTE operation removes the last value of an attribute:
> private boolean isCompleteRemoval( Attribute change, Attributes entry )
> throws NamingException
> {
> // if change size is 0 then all values are deleted then we're screwed
> if ( change.size() == 0 )
> {
> return true;
> }
> // can't do math to figure our if all values are removed since some
> // values in the modify request may not be in the entry. we need to
> // remove the values from a cloned version of the attribute and see
> // if nothing is left.
> Attribute changedEntryAttr = entry.get( change.getID() );
> for ( int jj = 0; jj < change.size(); jj++ )
> {
> changedEntryAttr.remove( change.get( jj ) );
> }
> return changedEntryAttr.size() == 0;
> }
> Changing the line
> Attribute changedEntryAttr = entry.get( change.getID() );
> to
> Attribute changedEntryAttr = entry.get( change.getID() ).clone();
> seems to fix the problem.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.