Program: 89343
Project: 89343
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.exists(actionedUponNodeRef) && freezeService.isFrozen(actionedUponNodeRef) == false) {
    String eventName=(String)action.getParameterValue(PARAM_EVENT_NAME);
    String eventCompletedBy=(String)action.getParameterValue(PARAM_EVENT_COMPLETED_BY);
    Date eventCompletedAt=(Date)action.getParameterValue(PARAM_EVENT_COMPLETED_AT);
    if (this.nodeService.hasAspect(actionedUponNodeRef,ASPECT_DISPOSITION_LIFECYCLE)) {
      DispositionAction da=this.dispositionService.getNextDispositionAction(actionedUponNodeRef);
      if (da != null) {
        EventCompletionDetails event=getEvent(da,eventName);
        if (event != null) {
          if (eventCompletedAt == null) {
            eventCompletedAt=new Date();
          }
          if (eventCompletedBy == null) {
            eventCompletedBy=AuthenticationUtil.getRunAsUser();
          }
          NodeRef eventNodeRef=event.getNodeRef();
          Map<QName,Serializable> props=this.nodeService.getProperties(eventNodeRef);
          props.put(PROP_EVENT_EXECUTION_COMPLETE,true);
          props.put(PROP_EVENT_EXECUTION_COMPLETED_AT,eventCompletedAt);
          props.put(PROP_EVENT_EXECUTION_COMPLETED_BY,eventCompletedBy);
          this.nodeService.setProperties(eventNodeRef,props);
          updateEventEligible(da);
        }
      }
    }
  }
}

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.exists(actionedUponNodeRef) && !freezeService.isFrozen(actionedUponNodeRef)) {
    String eventName=(String)action.getParameterValue(PARAM_EVENT_NAME);
    String eventCompletedBy=(String)action.getParameterValue(PARAM_EVENT_COMPLETED_BY);
    Date eventCompletedAt=(Date)action.getParameterValue(PARAM_EVENT_COMPLETED_AT);
    if (this.nodeService.hasAspect(actionedUponNodeRef,ASPECT_DISPOSITION_LIFECYCLE)) {
      DispositionAction da=this.dispositionService.getNextDispositionAction(actionedUponNodeRef);
      if (da != null) {
        EventCompletionDetails event=getEvent(da,eventName);
        if (event != null) {
          if (eventCompletedAt == null) {
            eventCompletedAt=new Date();
          }
          if (eventCompletedBy == null) {
            eventCompletedBy=AuthenticationUtil.getRunAsUser();
          }
          NodeRef eventNodeRef=event.getNodeRef();
          Map<QName,Serializable> props=this.nodeService.getProperties(eventNodeRef);
          props.put(PROP_EVENT_EXECUTION_COMPLETE,true);
          props.put(PROP_EVENT_EXECUTION_COMPLETED_AT,eventCompletedAt);
          props.put(PROP_EVENT_EXECUTION_COMPLETED_BY,eventCompletedBy);
          this.nodeService.setProperties(eventNodeRef,props);
          updateEventEligible(da);
        }
      }
    }
  }
}