[ 
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.

Reply via email to