Program: 89354
Project: 89354
Buggy source:
/** 
 * @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action,org.alfresco.service.cmr.repository.NodeRef)
 */
@Override protected void executeImpl(Action action,NodeRef actionedUponNodeRef){
  if (nodeService.hasAspect(actionedUponNodeRef,ASPECT_DISPOSITION_LIFECYCLE) && nodeService.hasAspect(actionedUponNodeRef,ASPECT_CUT_OFF)) {
    DispositionAction da=dispositionService.getLastCompletedDispostionAction(actionedUponNodeRef);
    if (da == null || da.getName().equals("String_Node_Str") == false) {
      throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_UNDO_NOT_LAST));
    }
    nodeService.removeAspect(actionedUponNodeRef,ASPECT_CUT_OFF);
    if (recordFolderService.isRecordFolder(actionedUponNodeRef)) {
      List<NodeRef> records=recordService.getRecords(actionedUponNodeRef);
      for (      NodeRef record : records) {
        nodeService.removeAspect(record,ASPECT_CUT_OFF);
      }
    }
    DispositionAction currentDa=dispositionService.getNextDispositionAction(actionedUponNodeRef);
    if (currentDa != null) {
      nodeService.deleteNode(currentDa.getNodeRef());
    }
    nodeService.moveNode(da.getNodeRef(),actionedUponNodeRef,ASSOC_NEXT_DISPOSITION_ACTION,ASSOC_NEXT_DISPOSITION_ACTION);
    nodeService.setProperty(da.getNodeRef(),PROP_DISPOSITION_ACTION_STARTED_AT,null);
    nodeService.setProperty(da.getNodeRef(),PROP_DISPOSITION_ACTION_STARTED_BY,null);
    nodeService.setProperty(da.getNodeRef(),PROP_DISPOSITION_ACTION_COMPLETED_AT,null);
    nodeService.setProperty(da.getNodeRef(),PROP_DISPOSITION_ACTION_COMPLETED_BY,null);
  }
}

Fixed version (ground truth):
/** 
 * @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action,org.alfresco.service.cmr.repository.NodeRef)
 */
@Override protected void executeImpl(Action action,NodeRef actionedUponNodeRef){
  if (nodeService.hasAspect(actionedUponNodeRef,ASPECT_DISPOSITION_LIFECYCLE) && nodeService.hasAspect(actionedUponNodeRef,ASPECT_CUT_OFF)) {
    DispositionAction da=dispositionService.getLastCompletedDispostionAction(actionedUponNodeRef);
    if (da == null || !da.getName().equals("String_Node_Str")) {
      throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_UNDO_NOT_LAST));
    }
    nodeService.removeAspect(actionedUponNodeRef,ASPECT_CUT_OFF);
    if (recordFolderService.isRecordFolder(actionedUponNodeRef)) {
      List<NodeRef> records=recordService.getRecords(actionedUponNodeRef);
      for (      NodeRef record : records) {
        nodeService.removeAspect(record,ASPECT_CUT_OFF);
      }
    }
    DispositionAction currentDa=dispositionService.getNextDispositionAction(actionedUponNodeRef);
    if (currentDa != null) {
      nodeService.deleteNode(currentDa.getNodeRef());
    }
    nodeService.moveNode(da.getNodeRef(),actionedUponNodeRef,ASSOC_NEXT_DISPOSITION_ACTION,ASSOC_NEXT_DISPOSITION_ACTION);
    nodeService.setProperty(da.getNodeRef(),PROP_DISPOSITION_ACTION_STARTED_AT,null);
    nodeService.setProperty(da.getNodeRef(),PROP_DISPOSITION_ACTION_STARTED_BY,null);
    nodeService.setProperty(da.getNodeRef(),PROP_DISPOSITION_ACTION_COMPLETED_AT,null);
    nodeService.setProperty(da.getNodeRef(),PROP_DISPOSITION_ACTION_COMPLETED_BY,null);
  }
}