Program: 47191
Project: 47191
Buggy source:
/** 
 * Parses media info from FFmpeg's stderr output
 * @param lines The stderr output
 * @param input The FFmpeg input (-i) argument used
 */
public void parseFFmpegInfo(List<String> lines,String input){
  if (lines != null) {
    if ("String_Node_Str".equals(input)) {
      input="String_Node_Str";
    }
    boolean matchs=false;
    int langId=0;
    int subId=0;
    ListIterator<String> FFmpegMetaData=lines.listIterator();
    for (    String line : lines) {
      FFmpegMetaData.next();
      line=line.trim();
      if (line.startsWith("String_Node_Str")) {
        matchs=false;
      }
 else       if (line.startsWith("String_Node_Str")) {
        if (line.contains(input)) {
          matchs=true;
          container=line.substring(10,line.indexOf(',',11)).trim();
        }
 else {
          matchs=false;
        }
      }
 else       if (matchs) {
        if (line.contains("String_Node_Str")) {
          StringTokenizer st=new StringTokenizer(line,"String_Node_Str");
          while (st.hasMoreTokens()) {
            String token=st.nextToken().trim();
            if (token.startsWith("String_Node_Str")) {
              String durationStr=token.substring(10);
              int l=durationStr.substring(durationStr.indexOf('.') + 1).length();
              if (l < 4) {
                durationStr+="String_Node_Str".substring(0,3 - l);
              }
              if (durationStr.contains("String_Node_Str")) {
                durationSec=null;
              }
 else {
                durationSec=parseDurationString(durationStr);
              }
            }
 else             if (token.startsWith("String_Node_Str")) {
              String bitr=token.substring(9);
              int spacepos=bitr.indexOf(' ');
              if (spacepos > -1) {
                String value=bitr.substring(0,spacepos);
                String unit=bitr.substring(spacepos + 1);
                bitrate=Integer.parseInt(value);
                if (unit.equals("String_Node_Str")) {
                  bitrate=1024 * bitrate;
                }
                if (unit.equals("String_Node_Str")) {
                  bitrate=1048576 * bitrate;
                }
              }
            }
          }
        }
 else         if (line.contains("String_Node_Str")) {
          StringTokenizer st=new StringTokenizer(line,"String_Node_Str");
          int a=line.indexOf('(');
          int b=line.indexOf("String_Node_Str",a);
          DLNAMediaAudio audio=new DLNAMediaAudio();
          audio.setId(langId++);
          if (a > -1 && b > a) {
            audio.setLang(line.substring(a + 1,b));
          }
 else {
            audio.setLang(DLNAMediaLang.UND);
          }
          a=line.indexOf("String_Node_Str");
          b=line.indexOf(']',a);
          if (a > -1 && b > a + 3) {
            String idString=line.substring(a + 3,b);
            try {
              audio.setId(Integer.parseInt(idString,16));
            }
 catch (            NumberFormatException nfe) {
              LOGGER.debug("String_Node_Str" + idString);
            }
          }
          while (st.hasMoreTokens()) {
            String token=st.nextToken().trim();
            if (token.startsWith("String_Node_Str")) {
              audio.setCodecA(token.substring(token.indexOf("String_Node_Str") + 7));
            }
 else             if (token.endsWith("String_Node_Str")) {
              audio.setSampleFrequency(token.substring(0,token.indexOf("String_Node_Str")).trim());
            }
 else             if (token.equals("String_Node_Str")) {
              audio.getAudioProperties().setNumberOfChannels(1);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.getAudioProperties().setNumberOfChannels(2);
            }
 else             if (token.equals("String_Node_Str") || token.equals("String_Node_Str") || token.equals("String_Node_Str")) {
              audio.getAudioProperties().setNumberOfChannels(6);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.getAudioProperties().setNumberOfChannels(5);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.getAudioProperties().setNumberOfChannels(4);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.getAudioProperties().setNumberOfChannels(2);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.setBitsperSample(32);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.setBitsperSample(24);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.setBitsperSample(16);
            }
          }
          int FFmpegMetaDataNr=FFmpegMetaData.nextIndex();
          if (FFmpegMetaDataNr > -1) {
            line=lines.get(FFmpegMetaDataNr);
          }
          if (line.contains("String_Node_Str")) {
            FFmpegMetaDataNr+=1;
            line=lines.get(FFmpegMetaDataNr);
            while (line.indexOf("String_Node_Str") == 0) {
              if (line.toLowerCase().contains("String_Node_Str")) {
                int aa=line.indexOf("String_Node_Str");
                int bb=line.length();
                if (aa > -1 && bb > aa) {
                  audio.setFlavor(line.substring(aa + 2,bb));
                  break;
                }
              }
 else {
                FFmpegMetaDataNr+=1;
                line=lines.get(FFmpegMetaDataNr);
              }
            }
          }
          audioTracks.add(audio);
        }
 else         if (line.contains("String_Node_Str")) {
          StringTokenizer st=new StringTokenizer(line,"String_Node_Str");
          while (st.hasMoreTokens()) {
            String token=st.nextToken().trim();
            if (token.startsWith("String_Node_Str")) {
              codecV=token.substring(token.indexOf("String_Node_Str") + 7);
            }
 else             if ((token.contains("String_Node_Str") || token.contains("String_Node_Str"))) {
              String frameRateDoubleString=token.substring(0,token.indexOf("String_Node_Str")).trim();
              try {
                if (!frameRateDoubleString.equals(frameRate)) {
                  Double frameRateDouble=Double.parseDouble(frameRateDoubleString);
                  frameRate=String.format(Locale.ENGLISH,"String_Node_Str",frameRateDouble / 2);
                }
              }
 catch (              NumberFormatException nfe) {
                LOGGER.debug("String_Node_Str" + frameRateDoubleString + "String_Node_Str");
              }
            }
 else             if ((token.contains("String_Node_Str") || token.contains("String_Node_Str")) && frameRate == null) {
              frameRate=token.substring(0,token.indexOf("String_Node_Str")).trim();
            }
 else             if ((token.contains("String_Node_Str") || token.contains("String_Node_Str")) && frameRate == null) {
              frameRate=token.substring(0,token.indexOf("String_Node_Str")).trim();
            }
 else             if (token.indexOf('x') > -1 && !token.contains("String_Node_Str")) {
              String resolution=token.trim();
              if (resolution.contains("String_Node_Str")) {
                resolution=resolution.substring(0,resolution.indexOf("String_Node_Str"));
              }
              try {
                width=Integer.parseInt(resolution.substring(0,resolution.indexOf('x')));
              }
 catch (              NumberFormatException nfe) {
                LOGGER.debug("String_Node_Str" + resolution.substring(0,resolution.indexOf('x')) + "String_Node_Str");
              }
              try {
                height=Integer.parseInt(resolution.substring(resolution.indexOf('x') + 1));
              }
 catch (              NumberFormatException nfe) {
                LOGGER.debug("String_Node_Str" + resolution.substring(resolution.indexOf('x') + 1) + "String_Node_Str");
              }
            }
          }
        }
 else         if (line.contains("String_Node_Str")) {
          DLNAMediaSubtitle lang=new DLNAMediaSubtitle();
          if (line.contains("String_Node_Str") || line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.SUBRIP);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.TEXT);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.MICRODVD);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.SAMI);
          }
 else           if (line.contains("String_Node_Str") || line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.ASS);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.VOBSUB);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.DIVX);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.TX3G);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.WEBVTT);
          }
 else {
            lang.setType(SubtitleType.UNKNOWN);
          }
          int a=line.indexOf('(');
          int b=line.indexOf("String_Node_Str",a);
          if (a > -1 && b > a) {
            lang.setLang(line.substring(a + 1,b));
          }
 else {
            lang.setLang(DLNAMediaLang.UND);
          }
          lang.setId(subId++);
          int FFmpegMetaDataNr=FFmpegMetaData.nextIndex();
          if (FFmpegMetaDataNr > -1) {
            line=lines.get(FFmpegMetaDataNr);
          }
          if (line.contains("String_Node_Str")) {
            FFmpegMetaDataNr+=1;
            line=lines.get(FFmpegMetaDataNr);
            while (line.indexOf("String_Node_Str") == 0) {
              if (line.toLowerCase().contains("String_Node_Str")) {
                int aa=line.indexOf("String_Node_Str");
                int bb=line.length();
                if (aa > -1 && bb > aa) {
                  lang.setFlavor(line.substring(aa + 2,bb));
                  break;
                }
              }
 else {
                FFmpegMetaDataNr+=1;
                line=lines.get(FFmpegMetaDataNr);
              }
            }
          }
          subtitleTracks.add(lang);
        }
      }
    }
  }
  ffmpegparsed=true;
}

Fixed version (ground truth):
/** 
 * Parses media info from FFmpeg's stderr output
 * @param lines The stderr output
 * @param input The FFmpeg input (-i) argument used
 */
public void parseFFmpegInfo(List<String> lines,String input){
  if (lines != null) {
    if ("String_Node_Str".equals(input)) {
      input="String_Node_Str";
    }
    boolean matchs=false;
    int langId=0;
    int subId=0;
    ListIterator<String> FFmpegMetaData=lines.listIterator();
    for (    String line : lines) {
      FFmpegMetaData.next();
      line=line.trim();
      if (line.startsWith("String_Node_Str")) {
        matchs=false;
      }
 else       if (line.startsWith("String_Node_Str")) {
        if (line.contains(input)) {
          matchs=true;
          container=line.substring(10,line.indexOf(',',11)).trim();
          if ("String_Node_Str".equals(container)) {
            container=line.substring(line.lastIndexOf('.') + 1,line.lastIndexOf("String_Node_Str")).trim();
            LOGGER.trace("String_Node_Str" + container + "String_Node_Str");
          }
        }
 else {
          matchs=false;
        }
      }
 else       if (matchs) {
        if (line.contains("String_Node_Str")) {
          StringTokenizer st=new StringTokenizer(line,"String_Node_Str");
          while (st.hasMoreTokens()) {
            String token=st.nextToken().trim();
            if (token.startsWith("String_Node_Str")) {
              String durationStr=token.substring(10);
              int l=durationStr.substring(durationStr.indexOf('.') + 1).length();
              if (l < 4) {
                durationStr+="String_Node_Str".substring(0,3 - l);
              }
              if (durationStr.contains("String_Node_Str")) {
                durationSec=null;
              }
 else {
                durationSec=parseDurationString(durationStr);
              }
            }
 else             if (token.startsWith("String_Node_Str")) {
              String bitr=token.substring(9);
              int spacepos=bitr.indexOf(' ');
              if (spacepos > -1) {
                String value=bitr.substring(0,spacepos);
                String unit=bitr.substring(spacepos + 1);
                bitrate=Integer.parseInt(value);
                if (unit.equals("String_Node_Str")) {
                  bitrate=1024 * bitrate;
                }
                if (unit.equals("String_Node_Str")) {
                  bitrate=1048576 * bitrate;
                }
              }
            }
          }
        }
 else         if (line.contains("String_Node_Str")) {
          StringTokenizer st=new StringTokenizer(line,"String_Node_Str");
          int a=line.indexOf('(');
          int b=line.indexOf("String_Node_Str",a);
          DLNAMediaAudio audio=new DLNAMediaAudio();
          audio.setId(langId++);
          if (a > -1 && b > a) {
            audio.setLang(line.substring(a + 1,b));
          }
 else {
            audio.setLang(DLNAMediaLang.UND);
          }
          a=line.indexOf("String_Node_Str");
          b=line.indexOf(']',a);
          if (a > -1 && b > a + 3) {
            String idString=line.substring(a + 3,b);
            try {
              audio.setId(Integer.parseInt(idString,16));
            }
 catch (            NumberFormatException nfe) {
              LOGGER.debug("String_Node_Str" + idString);
            }
          }
          while (st.hasMoreTokens()) {
            String token=st.nextToken().trim();
            if (token.startsWith("String_Node_Str")) {
              audio.setCodecA(token.substring(token.indexOf("String_Node_Str") + 7));
            }
 else             if (token.endsWith("String_Node_Str")) {
              audio.setSampleFrequency(token.substring(0,token.indexOf("String_Node_Str")).trim());
            }
 else             if (token.equals("String_Node_Str")) {
              audio.getAudioProperties().setNumberOfChannels(1);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.getAudioProperties().setNumberOfChannels(2);
            }
 else             if (token.equals("String_Node_Str") || token.equals("String_Node_Str") || token.equals("String_Node_Str")) {
              audio.getAudioProperties().setNumberOfChannels(6);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.getAudioProperties().setNumberOfChannels(5);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.getAudioProperties().setNumberOfChannels(4);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.getAudioProperties().setNumberOfChannels(2);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.setBitsperSample(32);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.setBitsperSample(24);
            }
 else             if (token.equals("String_Node_Str")) {
              audio.setBitsperSample(16);
            }
          }
          int FFmpegMetaDataNr=FFmpegMetaData.nextIndex();
          if (FFmpegMetaDataNr > -1) {
            line=lines.get(FFmpegMetaDataNr);
          }
          if (line.contains("String_Node_Str")) {
            FFmpegMetaDataNr+=1;
            line=lines.get(FFmpegMetaDataNr);
            while (line.indexOf("String_Node_Str") == 0) {
              if (line.toLowerCase().contains("String_Node_Str")) {
                int aa=line.indexOf("String_Node_Str");
                int bb=line.length();
                if (aa > -1 && bb > aa) {
                  audio.setFlavor(line.substring(aa + 2,bb));
                  break;
                }
              }
 else {
                FFmpegMetaDataNr+=1;
                line=lines.get(FFmpegMetaDataNr);
              }
            }
          }
          audioTracks.add(audio);
        }
 else         if (line.contains("String_Node_Str")) {
          StringTokenizer st=new StringTokenizer(line,"String_Node_Str");
          while (st.hasMoreTokens()) {
            String token=st.nextToken().trim();
            if (token.startsWith("String_Node_Str")) {
              codecV=token.substring(token.indexOf("String_Node_Str") + 7);
            }
 else             if ((token.contains("String_Node_Str") || token.contains("String_Node_Str"))) {
              String frameRateDoubleString=token.substring(0,token.indexOf("String_Node_Str")).trim();
              try {
                if (!frameRateDoubleString.equals(frameRate)) {
                  Double frameRateDouble=Double.parseDouble(frameRateDoubleString);
                  frameRate=String.format(Locale.ENGLISH,"String_Node_Str",frameRateDouble / 2);
                }
              }
 catch (              NumberFormatException nfe) {
                LOGGER.debug("String_Node_Str" + frameRateDoubleString + "String_Node_Str");
              }
            }
 else             if ((token.contains("String_Node_Str") || token.contains("String_Node_Str")) && frameRate == null) {
              frameRate=token.substring(0,token.indexOf("String_Node_Str")).trim();
            }
 else             if ((token.contains("String_Node_Str") || token.contains("String_Node_Str")) && frameRate == null) {
              frameRate=token.substring(0,token.indexOf("String_Node_Str")).trim();
            }
 else             if (token.indexOf('x') > -1 && !token.contains("String_Node_Str")) {
              String resolution=token.trim();
              if (resolution.contains("String_Node_Str")) {
                resolution=resolution.substring(0,resolution.indexOf("String_Node_Str"));
              }
              try {
                width=Integer.parseInt(resolution.substring(0,resolution.indexOf('x')));
              }
 catch (              NumberFormatException nfe) {
                LOGGER.debug("String_Node_Str" + resolution.substring(0,resolution.indexOf('x')) + "String_Node_Str");
              }
              try {
                height=Integer.parseInt(resolution.substring(resolution.indexOf('x') + 1));
              }
 catch (              NumberFormatException nfe) {
                LOGGER.debug("String_Node_Str" + resolution.substring(resolution.indexOf('x') + 1) + "String_Node_Str");
              }
            }
          }
        }
 else         if (line.contains("String_Node_Str")) {
          DLNAMediaSubtitle lang=new DLNAMediaSubtitle();
          if (line.contains("String_Node_Str") || line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.SUBRIP);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.TEXT);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.MICRODVD);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.SAMI);
          }
 else           if (line.contains("String_Node_Str") || line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.ASS);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.VOBSUB);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.DIVX);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.TX3G);
          }
 else           if (line.contains("String_Node_Str")) {
            lang.setType(SubtitleType.WEBVTT);
          }
 else {
            lang.setType(SubtitleType.UNKNOWN);
          }
          int a=line.indexOf('(');
          int b=line.indexOf("String_Node_Str",a);
          if (a > -1 && b > a) {
            lang.setLang(line.substring(a + 1,b));
          }
 else {
            lang.setLang(DLNAMediaLang.UND);
          }
          lang.setId(subId++);
          int FFmpegMetaDataNr=FFmpegMetaData.nextIndex();
          if (FFmpegMetaDataNr > -1) {
            line=lines.get(FFmpegMetaDataNr);
          }
          if (line.contains("String_Node_Str")) {
            FFmpegMetaDataNr+=1;
            line=lines.get(FFmpegMetaDataNr);
            while (line.indexOf("String_Node_Str") == 0) {
              if (line.toLowerCase().contains("String_Node_Str")) {
                int aa=line.indexOf("String_Node_Str");
                int bb=line.length();
                if (aa > -1 && bb > aa) {
                  lang.setFlavor(line.substring(aa + 2,bb));
                  break;
                }
              }
 else {
                FFmpegMetaDataNr+=1;
                line=lines.get(FFmpegMetaDataNr);
              }
            }
          }
          subtitleTracks.add(lang);
        }
      }
    }
  }
  ffmpegparsed=true;
}