Program: 69299
Project: 69299
Buggy source:
private void launchPublishingWizard(UserRequest ureq,ICourse course,boolean requestOnClose){
  if (publishStepsController != null)   return;
  Step start=new PublishStep00(ureq,cetm,course);
  StepRunnerCallback finish=new StepRunnerCallback(){
    public Step execute(    UserRequest ureq1,    WindowControl wControl1,    StepsRunContext runContext){
      boolean hasChanges=false;
      PublishProcess publishManager=(PublishProcess)runContext.get("String_Node_Str");
      PublishEvents publishEvents=publishManager.getPublishEvents();
      if (runContext.containsKey("String_Node_Str") && ((Boolean)runContext.get("String_Node_Str")).booleanValue()) {
        @SuppressWarnings("String_Node_Str") Collection<String> selectedNodeIds=(Collection<String>)runContext.get("String_Node_Str");
        hasChanges=(selectedNodeIds != null) && (selectedNodeIds.size() > 0);
        if (hasChanges) {
          publishManager.applyPublishSet(ureq1.getIdentity(),ureq1.getLocale(),false);
        }
      }
      if (runContext.containsKey("String_Node_Str")) {
        CourseAccessAndProperties accessAndProperties=(CourseAccessAndProperties)runContext.get("String_Node_Str");
        publishManager.changeAccessAndProperties(getIdentity(),accessAndProperties);
        hasChanges=true;
      }
      if (runContext.containsKey("String_Node_Str")) {
        String choice=(String)runContext.get("String_Node_Str");
        @SuppressWarnings("String_Node_Str") List<CategoryLabel> categories=(List<CategoryLabel>)runContext.get("String_Node_Str");
        publishManager.publishToCatalog(choice,categories);
      }
      if (publishEvents.getPostPublishingEvents().size() > 0) {
        for (        MultiUserEvent event : publishEvents.getPostPublishingEvents()) {
          CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(event,ores);
        }
      }
      return hasChanges ? StepsMainRunController.DONE_MODIFIED : StepsMainRunController.DONE_UNCHANGED;
    }
  }
;
  publishStepsController=new StepsMainRunController(ureq,getWindowControl(),start,finish,null,translate("String_Node_Str"),"String_Node_Str");
  listenTo(publishStepsController);
  publishStepsController.getRunContext().put("String_Node_Str",requestOnClose);
  getWindowControl().pushAsModalDialog(publishStepsController.getInitialComponent());
}

Fixed version (ground truth):
private void launchPublishingWizard(UserRequest ureq,ICourse course,boolean requestOnClose){
  if (publishStepsController != null)   return;
  Step start=new PublishStep00(ureq,cetm,course);
  StepRunnerCallback finish=new StepRunnerCallback(){
    @Override public Step execute(    UserRequest ureq1,    WindowControl wControl1,    StepsRunContext runContext){
      boolean hasChanges=false;
      PublishProcess publishManager=(PublishProcess)runContext.get("String_Node_Str");
      PublishEvents publishEvents=publishManager.getPublishEvents();
      if (runContext.containsKey("String_Node_Str") && ((Boolean)runContext.get("String_Node_Str")).booleanValue()) {
        @SuppressWarnings("String_Node_Str") Collection<String> selectedNodeIds=(Collection<String>)runContext.get("String_Node_Str");
        hasChanges=(selectedNodeIds != null) && (selectedNodeIds.size() > 0);
        if (hasChanges) {
          publishManager.applyPublishSet(ureq1.getIdentity(),ureq1.getLocale(),false);
        }
      }
      if (runContext.containsKey("String_Node_Str")) {
        CourseAccessAndProperties accessAndProperties=(CourseAccessAndProperties)runContext.get("String_Node_Str");
        publishManager.changeAccessAndProperties(getIdentity(),accessAndProperties);
        hasChanges=true;
      }
      CourseCatalog courseCatalog=(CourseCatalog)runContext.get("String_Node_Str");
      if (courseCatalog != null) {
        publishManager.publishToCatalog(courseCatalog.getChoiceValue(),courseCatalog.getCategoryLabels());
      }
      if (publishEvents.getPostPublishingEvents().size() > 0) {
        for (        MultiUserEvent event : publishEvents.getPostPublishingEvents()) {
          CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(event,ores);
        }
      }
      return hasChanges ? StepsMainRunController.DONE_MODIFIED : StepsMainRunController.DONE_UNCHANGED;
    }
  }
;
  publishStepsController=new StepsMainRunController(ureq,getWindowControl(),start,finish,null,translate("String_Node_Str"),"String_Node_Str");
  listenTo(publishStepsController);
  publishStepsController.getRunContext().put("String_Node_Str",requestOnClose);
  getWindowControl().pushAsModalDialog(publishStepsController.getInitialComponent());
}