Program: 187213
Project: 187213
Buggy source:
public static ArrayList<Lesson> loadLessonList(Context context,File targetFolder,String subFolder,String lang,int matchStatus){
  ArrayList<Lesson> lessons=new ArrayList<Lesson>();
  File lessonFolder=targetFolder;
  if (subFolder != null)   lessonFolder=new File(targetFolder,subFolder);
  if (lessonFolder.exists()) {
    File[] fileLessons=lessonFolder.listFiles();
    for (    File fileLesson : fileLessons) {
      try {
        File fileLessonJson=new File(fileLesson,"String_Node_Str");
        if (!fileLessonJson.exists()) {
          fileLessonJson=new File(fileLesson,"String_Node_Str");
        }
        File fileStatus=new File(fileLesson,LESSON_STATUS_FILE);
        int status=-1;
        if (fileStatus.exists()) {
          byte[] bStatus=new byte[(int)fileStatus.length()];
          IOUtils.readFully(new FileInputStream(fileStatus),bStatus);
          status=Integer.parseInt(new String(bStatus).trim());
        }
        if (matchStatus != -1 && matchStatus != status)         continue;
        if (fileLessonJson.exists()) {
          Lesson lesson=Lesson.parse(IOUtils.toString(new FileInputStream(fileLessonJson)));
          File fileIdx=new File(fileLesson,lesson.mResourcePath);
          lesson.mTitle=fileLesson.getName() + "String_Node_Str" + lesson.mTitle;
          lesson.mResourcePath=fileIdx.getAbsolutePath();
          lesson.mStatus=status;
          lessons.add(lesson);
          lesson.mLocalPath=fileLesson;
          lesson.mSortIdx=Integer.parseInt(lesson.mTitle.substring(2,lesson.mTitle.indexOf("String_Node_Str")));
        }
      }
 catch (      FileNotFoundException fnfe) {
        Log.w(AppConstants.TAG,"String_Node_Str" + fileLesson.getAbsolutePath(),fnfe);
      }
catch (      IOException fnfe) {
        Log.w(AppConstants.TAG,"String_Node_Str" + fileLesson.getAbsolutePath(),fnfe);
      }
catch (      Exception fnfe) {
        Log.w(AppConstants.TAG,"String_Node_Str" + fileLesson.getAbsolutePath(),fnfe);
      }
    }
  }
  Collections.sort(lessons,new Comparator<Lesson>(){
    public int compare(    Lesson lessonA,    Lesson lessonB){
      return lessonA.mSortIdx.compareTo(lessonB.mSortIdx);
    }
  }
);
  return lessons;
}

Fixed version (ground truth):
public static ArrayList<Lesson> loadLessonList(Context context,File targetFolder,String subFolder,String lang,int matchStatus){
  ArrayList<Lesson> lessons=new ArrayList<Lesson>();
  File lessonFolder=targetFolder;
  if (subFolder != null)   lessonFolder=new File(targetFolder,subFolder);
  if (lessonFolder.exists()) {
    File[] fileLessons=lessonFolder.listFiles();
    for (    File fileLesson : fileLessons) {
      try {
        File fileLessonJson=new File(fileLesson,"String_Node_Str");
        if (!fileLessonJson.exists()) {
          fileLessonJson=new File(fileLesson,"String_Node_Str");
        }
        File fileStatus=new File(fileLesson,LESSON_STATUS_FILE);
        int status=-1;
        Date statusModified=null;
        if (fileStatus.exists()) {
          byte[] bStatus=new byte[(int)fileStatus.length()];
          IOUtils.readFully(new FileInputStream(fileStatus),bStatus);
          status=Integer.parseInt(new String(bStatus).trim());
          statusModified=new Date(fileStatus.lastModified());
        }
        if (matchStatus != -1 && matchStatus != status)         continue;
        if (fileLessonJson.exists()) {
          Lesson lesson=Lesson.parse(IOUtils.toString(new FileInputStream(fileLessonJson)));
          File fileIdx=new File(fileLesson,lesson.mResourcePath);
          lesson.mTitle=fileLesson.getName() + "String_Node_Str" + lesson.mTitle;
          lesson.mResourcePath=fileIdx.getAbsolutePath();
          lesson.mStatus=status;
          lesson.mStatusModified=statusModified;
          lessons.add(lesson);
          lesson.mLocalPath=fileLesson;
          lesson.mSortIdx=Integer.parseInt(lesson.mTitle.substring(2,lesson.mTitle.indexOf("String_Node_Str")));
        }
      }
 catch (      FileNotFoundException fnfe) {
        Log.w(AppConstants.TAG,"String_Node_Str" + fileLesson.getAbsolutePath(),fnfe);
      }
catch (      IOException fnfe) {
        Log.w(AppConstants.TAG,"String_Node_Str" + fileLesson.getAbsolutePath(),fnfe);
      }
catch (      Exception fnfe) {
        Log.w(AppConstants.TAG,"String_Node_Str" + fileLesson.getAbsolutePath(),fnfe);
      }
    }
  }
  Collections.sort(lessons,new Comparator<Lesson>(){
    public int compare(    Lesson lessonA,    Lesson lessonB){
      return lessonA.mSortIdx.compareTo(lessonB.mSortIdx);
    }
  }
);
  return lessons;
}