Program: 47151
Project: 47151
Buggy source:
/** 
 * Converts ASS/SSA subtitles to 3D ASS/SSA subtitles. Based on https://bitbucket.org/r3pek/srt2ass3d
 * @param tempSubs Subtitles file to convert
 * @param media Information about video
 * @return Converted subtitles file
 * @throws IOException
 */
public static File convertASSToASS3D(File tempSubs,DLNAMediaInfo media,OutputParams params) throws IOException, NullPointerException {
  File outputSubs=new File(FilenameUtils.getFullPath(tempSubs.getPath()),FilenameUtils.getBaseName(tempSubs.getName()) + "String_Node_Str");
  StringBuilder outputString=new StringBuilder();
  String subsFileCharset=FileUtil.getFileCharset(tempSubs);
  if (subsFileCharset == null) {
    subsFileCharset=CHARSET_UTF_8;
  }
  BufferedWriter output;
  Mode3D mode3D=media.get3DLayout();
  if (mode3D == null) {
    LOGGER.debug("String_Node_Str");
    throw new NullPointerException("String_Node_Str");
  }
  int playResX;
  int playResY;
  if (mode3D == Mode3D.OUL || mode3D == Mode3D.OUR) {
    playResX=media.getWidth();
    playResY=media.getHeight() / 2;
  }
 else {
    playResX=media.getWidth() / 2;
    playResY=media.getHeight();
  }
  int depth3D=(int)-(((double)playResX / (double)100) * Double.valueOf(configuration.getDepth3D()));
  int offset=(playResX / 100) * 2;
  int bottomSubsPosition=(int)((playResY / (double)100) * Double.valueOf(configuration.getAssMargin()));
  int topSubsPositionTb=playResY + bottomSubsPosition;
  int middleSbs=media.getWidth() / 2;
  Pattern timePattern=Pattern.compile("String_Node_Str");
  try (BufferedReader input=new BufferedReader(new InputStreamReader(new FileInputStream(tempSubs),Charset.forName(subsFileCharset)))){
    output=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputSubs),Charset.forName(CHARSET_UTF_8)));
    String line;
    outputString.append("String_Node_Str");
    outputString.append("String_Node_Str");
    outputString.append("String_Node_Str");
    outputString.append("String_Node_Str").append(media.getWidth()).append("String_Node_Str");
    outputString.append("String_Node_Str").append(media.getHeight()).append("String_Node_Str");
    outputString.append("String_Node_Str");
    outputString.append("String_Node_Str");
    outputString.append("String_Node_Str");
    String fontScale=Double.toString(100 * Double.parseDouble(configuration.getAssScale()));
    String primaryColour=convertColorToAssHexFormat(new Color(configuration.getSubsColor()));
    String outline=configuration.getAssOutline();
    String shadow=configuration.getAssShadow();
    String fontSize=Integer.toString((int)(16 * media.getHeight() / (double)288));
    outputString.append("String_Node_Str").append(fontSize).append("String_Node_Str").append(primaryColour).append("String_Node_Str").append(fontScale).append("String_Node_Str").append(fontScale).append("String_Node_Str").append(outline).append("String_Node_Str").append(shadow).append("String_Node_Str");
    outputString.append("String_Node_Str").append(fontSize).append("String_Node_Str").append(primaryColour).append("String_Node_Str").append(fontScale).append("String_Node_Str").append(fontScale).append("String_Node_Str").append(outline).append("String_Node_Str").append(shadow).append("String_Node_Str");
    outputString.append("String_Node_Str");
    outputString.append("String_Node_Str");
    output.write(outputString.toString());
    int textPosition=0;
    while ((line=input.readLine()) != null) {
      if (line.startsWith("String_Node_Str")) {
        line=input.readLine();
        if (line != null && line.startsWith("String_Node_Str")) {
          String[] formatPattern=line.split("String_Node_Str");
          int i=0;
          for (          String component : formatPattern) {
            if (component.trim().equals("String_Node_Str")) {
              textPosition=i;
            }
            i++;
          }
        }
      }
      outputString.setLength(0);
      if (line.startsWith("String_Node_Str") && line.contains("String_Node_Str")) {
        String[] dialogPattern=line.split("String_Node_Str");
        String text=StringUtils.join(dialogPattern,"String_Node_Str",textPosition,dialogPattern.length);
        Matcher timeMatcher=timePattern.matcher(line);
        if (timeMatcher.find()) {
          if (mode3D == Mode3D.OUL || mode3D == Mode3D.HOUL) {
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",offset + depth3D)).append(String.format("String_Node_Str",topSubsPositionTb)).append(text).append("String_Node_Str");
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",offset + depth3D)).append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",bottomSubsPosition)).append(text).append("String_Node_Str");
          }
 else           if (mode3D == Mode3D.OUR) {
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",offset + depth3D)).append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",topSubsPositionTb)).append(text).append("String_Node_Str");
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",offset + depth3D)).append(String.format("String_Node_Str",bottomSubsPosition)).append(text).append("String_Node_Str");
          }
 else           if (mode3D == Mode3D.SBSL || mode3D == Mode3D.HSBSL) {
            int marginR1=playResX + offset + depth3D;
            int marginL2=playResX + offset + depth3D;
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",marginR1)).append(String.format("String_Node_Str",bottomSubsPosition)).append(text).append("String_Node_Str");
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",marginL2)).append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",bottomSubsPosition)).append(text).append("String_Node_Str");
          }
 else           if (mode3D == Mode3D.SBSR) {
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",middleSbs - offset + depth3D)).append(String.format("String_Node_Str",bottomSubsPosition)).append(text).append("String_Node_Str");
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",middleSbs - offset + depth3D)).append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",bottomSubsPosition)).append(text).append("String_Node_Str");
          }
        }
        output.write(outputString.toString());
      }
    }
  }
   LOGGER.debug("String_Node_Str" + outputSubs.getName());
  output.flush();
  output.close();
  tempSubs.deleteOnExit();
  return outputSubs;
}

Fixed version (ground truth):
/** 
 * Converts ASS/SSA subtitles to 3D ASS/SSA subtitles. Based on https://bitbucket.org/r3pek/srt2ass3d
 * @param tempSubs Subtitles file to convert
 * @param media Information about video
 * @return Converted subtitles file
 * @throws IOException
 */
public static File convertASSToASS3D(File tempSubs,DLNAMediaInfo media,OutputParams params) throws IOException, NullPointerException {
  File outputSubs=new File(FilenameUtils.getFullPath(tempSubs.getPath()),FilenameUtils.getBaseName(tempSubs.getName()) + "String_Node_Str");
  StringBuilder outputString=new StringBuilder();
  Charset subsFileCharset=FileUtil.getFileCharset(tempSubs);
  if (subsFileCharset == null) {
    subsFileCharset=StandardCharsets.UTF_8;
  }
  BufferedWriter output;
  Mode3D mode3D=media.get3DLayout();
  if (mode3D == null) {
    LOGGER.debug("String_Node_Str");
    throw new NullPointerException("String_Node_Str");
  }
  int playResX;
  int playResY;
  if (mode3D == Mode3D.OUL || mode3D == Mode3D.OUR) {
    playResX=media.getWidth();
    playResY=media.getHeight() / 2;
  }
 else {
    playResX=media.getWidth() / 2;
    playResY=media.getHeight();
  }
  int depth3D=(int)-(((double)playResX / (double)100) * Double.valueOf(configuration.getDepth3D()));
  int offset=(playResX / 100) * 2;
  int bottomSubsPosition=(int)((playResY / (double)100) * Double.valueOf(configuration.getAssMargin()));
  int topSubsPositionTb=playResY + bottomSubsPosition;
  int middleSbs=media.getWidth() / 2;
  Pattern timePattern=Pattern.compile("String_Node_Str");
  try (BufferedReader input=new BufferedReader(new InputStreamReader(new FileInputStream(tempSubs),subsFileCharset))){
    output=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputSubs),Charset.forName(CHARSET_UTF_8)));
    String line;
    outputString.append("String_Node_Str");
    outputString.append("String_Node_Str");
    outputString.append("String_Node_Str");
    outputString.append("String_Node_Str").append(media.getWidth()).append("String_Node_Str");
    outputString.append("String_Node_Str").append(media.getHeight()).append("String_Node_Str");
    outputString.append("String_Node_Str");
    outputString.append("String_Node_Str");
    outputString.append("String_Node_Str");
    String fontScale=Double.toString(100 * Double.parseDouble(configuration.getAssScale()));
    String primaryColour=convertColorToAssHexFormat(new Color(configuration.getSubsColor()));
    String outline=configuration.getAssOutline();
    String shadow=configuration.getAssShadow();
    String fontSize=Integer.toString((int)(16 * media.getHeight() / (double)288));
    outputString.append("String_Node_Str").append(fontSize).append("String_Node_Str").append(primaryColour).append("String_Node_Str").append(fontScale).append("String_Node_Str").append(fontScale).append("String_Node_Str").append(outline).append("String_Node_Str").append(shadow).append("String_Node_Str");
    outputString.append("String_Node_Str").append(fontSize).append("String_Node_Str").append(primaryColour).append("String_Node_Str").append(fontScale).append("String_Node_Str").append(fontScale).append("String_Node_Str").append(outline).append("String_Node_Str").append(shadow).append("String_Node_Str");
    outputString.append("String_Node_Str");
    outputString.append("String_Node_Str");
    output.write(outputString.toString());
    int textPosition=0;
    while ((line=input.readLine()) != null) {
      if (line.startsWith("String_Node_Str")) {
        line=input.readLine();
        if (line != null && line.startsWith("String_Node_Str")) {
          String[] formatPattern=line.split("String_Node_Str");
          int i=0;
          for (          String component : formatPattern) {
            if (component.trim().equals("String_Node_Str")) {
              textPosition=i;
            }
            i++;
          }
        }
      }
      outputString.setLength(0);
      if (line.startsWith("String_Node_Str") && line.contains("String_Node_Str")) {
        String[] dialogPattern=line.split("String_Node_Str");
        String text=StringUtils.join(dialogPattern,"String_Node_Str",textPosition,dialogPattern.length);
        Matcher timeMatcher=timePattern.matcher(line);
        if (timeMatcher.find()) {
          if (mode3D == Mode3D.OUL || mode3D == Mode3D.HOUL) {
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",offset + depth3D)).append(String.format("String_Node_Str",topSubsPositionTb)).append(text).append("String_Node_Str");
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",offset + depth3D)).append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",bottomSubsPosition)).append(text).append("String_Node_Str");
          }
 else           if (mode3D == Mode3D.OUR) {
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",offset + depth3D)).append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",topSubsPositionTb)).append(text).append("String_Node_Str");
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",offset + depth3D)).append(String.format("String_Node_Str",bottomSubsPosition)).append(text).append("String_Node_Str");
          }
 else           if (mode3D == Mode3D.SBSL || mode3D == Mode3D.HSBSL) {
            int marginR1=playResX + offset + depth3D;
            int marginL2=playResX + offset + depth3D;
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",marginR1)).append(String.format("String_Node_Str",bottomSubsPosition)).append(text).append("String_Node_Str");
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",marginL2)).append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",bottomSubsPosition)).append(text).append("String_Node_Str");
          }
 else           if (mode3D == Mode3D.SBSR) {
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",middleSbs - offset + depth3D)).append(String.format("String_Node_Str",bottomSubsPosition)).append(text).append("String_Node_Str");
            outputString.append("String_Node_Str").append(timeMatcher.group()).append("String_Node_Str").append(String.format("String_Node_Str",middleSbs - offset + depth3D)).append(String.format("String_Node_Str",offset - depth3D)).append(String.format("String_Node_Str",bottomSubsPosition)).append(text).append("String_Node_Str");
          }
        }
        output.write(outputString.toString());
      }
    }
  }
   LOGGER.debug("String_Node_Str" + outputSubs.getName());
  output.flush();
  output.close();
  tempSubs.deleteOnExit();
  return outputSubs;
}