Program: 14994
Project: 14994
Buggy source:
private String processVideos(String text){
  if (text == null)   return "String_Node_Str";
  int iFrameStart=text.indexOf("String_Node_Str");
  if (iFrameStart == -1)   return text;
  boolean usesSingleQuotes=text.contains("String_Node_Str");
  final int overlaySz=getResources().getDimensionPixelSize(R.dimen.reader_video_overlay_size) / 2;
  final int thumbWidth=getMaxImageWidth();
  final int thumbHeight=(int)(thumbWidth * 0.65f);
  final int overlayLeft=(thumbWidth / 2) - (overlaySz / 2);
  final int overlayTop=(thumbHeight / 2) - (overlaySz / 2);
  while (iFrameStart > -1) {
    int iFrameEnd=text.indexOf("String_Node_Str",iFrameStart);
    if (iFrameEnd == -1)     return text;
    int srcStart=text.indexOf(usesSingleQuotes ? "String_Node_Str" : "String_Node_Str",iFrameStart);
    if (srcStart == -1 || srcStart > iFrameEnd)     return text;
    int srcEnd=text.indexOf(usesSingleQuotes ? "String_Node_Str" : "String_Node_Str",srcStart + 5);
    if (srcEnd == -1 || srcEnd > iFrameEnd)     return text;
    String src=text.substring(srcStart + 5,srcEnd);
    boolean isVideo=(src.contains("String_Node_Str") || src.contains("String_Node_Str") || src.contains("String_Node_Str"));
    final String link;
    if (isVideo) {
      String thumbnailUrl=ReaderThumbnailTable.getThumbnailUrl(src);
      if (TextUtils.isEmpty(thumbnailUrl)) {
        link=String.format("String_Node_Str",src,overlaySz,overlaySz,OVERLAY_IMG);
      }
 else {
        link="String_Node_Str" + String.format("String_Node_Str",src,thumbnailUrl,thumbWidth,thumbHeight) + String.format("String_Node_Str",src,OVERLAY_IMG,overlaySz,overlaySz,overlayLeft,overlayTop)+ "String_Node_Str";
        mVideoThumbnailUrls.add(thumbnailUrl);
      }
      text=text.substring(0,iFrameStart) + link + text.substring(iFrameStart);
    }
 else {
      link="String_Node_Str";
    }
    iFrameStart=text.indexOf("String_Node_Str",iFrameEnd + link.length());
  }
  return text;
}

Fixed version (ground truth):
private String processVideos(String text){
  if (text == null)   return "String_Node_Str";
  int iFrameStart=text.indexOf("String_Node_Str");
  if (iFrameStart == -1)   return text;
  boolean usesSingleQuotes=text.contains("String_Node_Str");
  while (iFrameStart > -1) {
    int iFrameEnd=text.indexOf("String_Node_Str",iFrameStart);
    if (iFrameEnd == -1)     return text;
    int srcStart=text.indexOf(usesSingleQuotes ? "String_Node_Str" : "String_Node_Str",iFrameStart);
    if (srcStart == -1 || srcStart > iFrameEnd)     return text;
    int srcEnd=text.indexOf(usesSingleQuotes ? "String_Node_Str" : "String_Node_Str",srcStart + 5);
    if (srcEnd == -1 || srcEnd > iFrameEnd)     return text;
    String src=text.substring(srcStart + 5,srcEnd);
    boolean isVideo=(src.contains("String_Node_Str") || src.contains("String_Node_Str") || src.contains("String_Node_Str"));
    final String videoDiv;
    if (isVideo) {
      String thumbnailUrl=ReaderThumbnailTable.getThumbnailUrl(src);
      videoDiv=makeVideoDiv(src,thumbnailUrl);
      if (!TextUtils.isEmpty(thumbnailUrl))       mVideoThumbnailUrls.add(thumbnailUrl);
      text=text.substring(0,iFrameStart) + videoDiv + text.substring(iFrameStart);
    }
 else {
      videoDiv="String_Node_Str";
    }
    iFrameStart=text.indexOf("String_Node_Str",iFrameEnd + videoDiv.length());
  }
  return text;
}