[ 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

Reply via email to