[ http://issues.apache.org/jira/browse/DIREVE-306?page=all ]
Alex Karasulu resolved DIREVE-306:
----------------------------------
Fix Version: 0.9.4
Resolution: Fixed
Committed small recommended change in revision 332797
> SchemaService modifies attibute while checking for removal of last attribute
> value
> ----------------------------------------------------------------------------------
>
> Key: DIREVE-306
> URL: http://issues.apache.org/jira/browse/DIREVE-306
> Project: Directory Server
> Type: Bug
> Components: interceptors
> Versions: 0.9.3
> Reporter: Claus Turkalj
> Assignee: Alex Karasulu
> Fix For: 0.9.4
>
> 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.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira