Program: 47107
Project: 47107
Buggy source:
public static void read(List<DLNAResource> playlist,File f) throws IOException {
  if (!f.exists()) {
    return;
  }
  try (BufferedReader in=new BufferedReader(new FileReader(f))){
    String str;
    while ((str=in.readLine()) != null) {
      if (org.apache.commons.lang.StringUtils.isEmpty(str)) {
        continue;
      }
      if (str.startsWith("String_Node_Str")) {
        continue;
      }
      str=str.trim();
      if (!str.startsWith("String_Node_Str")) {
        continue;
      }
      str=str.substring(7);
      int pos=str.indexOf(';');
      if (pos == -1) {
        continue;
      }
      String master=str.substring(0,pos);
      str=str.substring(pos + 1);
      pos=str.indexOf(';');
      String subData=null;
      String resData=null;
      DLNAResource res=null;
      Player player=null;
      while (pos != -1) {
        if (str.startsWith("String_Node_Str")) {
          player=findPlayer(str.substring(7,pos));
        }
        if (str.startsWith("String_Node_Str")) {
          resData=str.substring(6,pos);
        }
        if (str.startsWith("String_Node_Str")) {
          subData=str.substring(3,pos);
        }
        str=str.substring(pos + 1);
        pos=str.indexOf(';');
      }
      LOGGER.debug("String_Node_Str" + master + "String_Node_Str"+ str);
      ExternalListener external;
      if (master.startsWith("String_Node_Str")) {
        res=parse(master.substring(9),str);
      }
 else {
        external=findMasterParent(master);
        if (external != null) {
          res=resolveCreateMethod(external,str);
          if (res != null) {
            LOGGER.debug("String_Node_Str" + res + "String_Node_Str"+ external);
            res.setMasterParent(external);
          }
        }
      }
      if (res != null) {
        if (resData != null) {
          ResumeObj r=new ResumeObj(new File(resData));
          if (!r.isDone()) {
            r.read();
            res.setResume(r);
          }
        }
        res.setPlayer(player);
        if (subData != null) {
          DLNAMediaSubtitle s=res.getMediaSubtitle();
          if (s == null) {
            s=new DLNAMediaSubtitle();
            res.setMediaSubtitle(s);
          }
          String[] tmp=subData.split("String_Node_Str");
          s.setLang(tmp[0]);
          subData=tmp[1];
          if (subData.startsWith("String_Node_Str")) {
            String sFile=subData.substring(5);
            s.setExternalFile(new File(sFile));
            s.setId(100);
            SubtitleType t=SubtitleType.valueOfFileExtension(FileUtil.getExtension(sFile));
            s.setType(t);
          }
 else           if (subData.startsWith("String_Node_Str")) {
            s.setId(Integer.parseInt(subData.substring(3)));
          }
        }
        playlist.add(res);
      }
    }
  }
 }

Fixed version (ground truth):
public static void read(List<DLNAResource> playlist,File f) throws IOException {
  if (!f.exists()) {
    return;
  }
  try (BufferedReader in=new BufferedReader(new FileReader(f))){
    String str;
    while ((str=in.readLine()) != null) {
      if (org.apache.commons.lang.StringUtils.isEmpty(str)) {
        continue;
      }
      if (str.startsWith("String_Node_Str")) {
        continue;
      }
      str=str.trim();
      if (!str.startsWith("String_Node_Str")) {
        continue;
      }
      str=str.substring(7);
      int pos=str.indexOf(';');
      if (pos == -1) {
        continue;
      }
      String master=str.substring(0,pos);
      str=str.substring(pos + 1);
      pos=str.indexOf(';');
      String subData=null;
      String resData=null;
      DLNAResource res=null;
      Player player=null;
      while (pos != -1) {
        if (str.startsWith("String_Node_Str")) {
          player=findPlayer(str.substring(7,pos));
        }
        if (str.startsWith("String_Node_Str")) {
          resData=str.substring(6,pos);
        }
        if (str.startsWith("String_Node_Str")) {
          subData=str.substring(3,pos);
        }
        str=str.substring(pos + 1);
        pos=str.indexOf(';');
      }
      LOGGER.debug("String_Node_Str" + master + "String_Node_Str"+ str);
      ExternalListener external;
      if (master.startsWith("String_Node_Str")) {
        res=parse(master.substring(9),str);
      }
 else {
        external=findMasterParent(master);
        if (external != null) {
          res=resolveCreateMethod(external,str);
          if (res != null) {
            LOGGER.debug("String_Node_Str" + res + "String_Node_Str"+ external);
            res.setMasterParent(external);
          }
        }
      }
      if (res != null) {
        if (resData != null) {
          ResumeObj r=new ResumeObj(new File(resData));
          if (!r.isDone()) {
            r.read();
            res.setResume(r);
          }
        }
        res.setPlayer(player);
        if (subData != null) {
          DLNAMediaSubtitle s=res.getMediaSubtitle();
          if (s == null) {
            s=new DLNAMediaSubtitle();
            res.setMediaSubtitle(s);
          }
          String[] tmp=subData.split("String_Node_Str");
          s.setLang(tmp[0]);
          subData=tmp[1];
          if (subData.startsWith("String_Node_Str")) {
            String sFile=subData.substring(5);
            s.setExternalFile(new File(sFile),null);
            s.setId(100);
            SubtitleType t=SubtitleType.valueOfFileExtension(FileUtil.getExtension(sFile));
            s.setType(t);
          }
 else           if (subData.startsWith("String_Node_Str")) {
            s.setId(Integer.parseInt(subData.substring(3)));
          }
        }
        playlist.add(res);
      }
    }
  }
 }