[Demonstration 1]

[Buggy Method]
public boolean parser(String body, int mode, boolean needPreviewInfo) {
    Pattern p;
    Matcher m;
    if (body == null)
        return false;
    if (!body.contains("<"))
        emsg = body;
    if (mode == EhClient.MODE_LOFI) {
        // Check is last page
        p = Pattern.compile("<a[^>]+>Next Page &gt;</a>");
        m = p.matcher(body);
        if (m.find())
            isLastPage = false;
        else
            isLastPage = true;
        // Parser preview
        p = Pattern.compile("<div class=\"gi\"[^>]*><a href=\"http://lofi.e-hentai.org/s/(\\w+)/\\d+-(\\d+)\"[^>]*>");
        m = p.matcher(body);
        boolean first = true;
        while (m.find()) {
            if (first) {
                pageTokenArray = new LinkedList<String>();
                previewStartIndex = Integer.parseInt(m.group(2)) - 1;
                first = false;
            }
            pageTokenArray.add(m.group(1));
        }
        if (first)
            return false;
        else
            return true;
    } else {
        // Parser preview info
        if (needPreviewInfo) {
            p = Pattern.compile("<td[^>]+><a[^>]+>([\\d,]+)</a></td><td[^>]+>(?:<a[^>]+>)?&gt;(?:</a>)?</td>");
            m = p.matcher(body);
            if (m.find())
                previewPageNum = Integer.valueOf(m.group(1).replace(",", ""));
            else {
                Log.e("TAG", "get needPreviewInfo failed");
                return false;
            }
            p = Pattern.compile("<td class=\"gdt1\">Images:</td><td class=\"gdt2\">([\\d,]+) ");
            m = p.matcher(body);
            if (m.find())
                imageNum = Integer.valueOf(m.group(1).replace(",", ""));
            else {
                Log.e("TAG", "get needPreviewInfo failed");
                return false;
            }
        }
        // Parser preview
        boolean first = true;
        if (body.contains("<div class=\"gdtl\"")) {
            p = Pattern.compile("<div class=\"gdtl\"[^>]*><a href=\"http://[^/]+/s/(\\w+)/\\d+-(\\d+)\">");
            m = p.matcher(body);
            while (m.find()) {
                if (first) {
                    pageTokenArray = new LinkedList<String>();
                    previewStartIndex = Integer.parseInt(m.group(2)) - 1;
                    first = false;
                }
                pageTokenArray.add(m.group(1));
            }
        } else {
            p = Pattern.compile("<div class=\"gdtm\"[^>]*><div[^>]*><a href=\"http://[^/]+/s/(\\w+)/\\d+-(\\d+)\">");
            m = p.matcher(body);
            while (m.find()) {
                if (first) {
                    pageTokenArray = new LinkedList<String>();
                    previewStartIndex = Integer.parseInt(m.group(2)) - 1;
                    first = false;
                }
                pageTokenArray.add(m.group(1));
            }
        }
        if (first) {
            Log.e("TAG", "get gdtm");
            return false;
        } else
            return true;
    }
}

[Buggy Hunk]
p = Pattern.compile("<td class=\"gdt1\">Images:</td><td class=\"gdt2\">([\\d,]+) ");

[Patch]
p = Pattern.compile("<tr><td[^<>]*>Length:</td><td[^<>]*>([\\d|,]+) pages</td></tr>");

[Demonstration 2]

[Buggy Method]
public String minusOperation(String firstNumber, String secondNumber) {
    if (firstNumber == null)
        firstNumber = "0";
    if (secondNumber.isEmpty())
        return firstNumber;
    if (firstNumber.charAt(0) != '-' && secondNumber.charAt(0) == '-') {
        secondNumber = secondNumber.replace("-", "");
        return plusOperation(firstNumber, secondNumber);
    }
    if (firstNumber.charAt(0) == '-' && secondNumber.charAt(0) != '-') {
        firstNumber = firstNumber.replace("-", "");
        return '-' + plusOperation(firstNumber, secondNumber);
    }
    if (firstNumber.charAt(0) == '-' && secondNumber.charAt(0) == '-') {
        firstNumber = firstNumber.replace("-", "");
        secondNumber = secondNumber.replace("-", "");
        return minusOperation(secondNumber, firstNumber);
    }
    String result;
    // *******************************
    StringWrapper first = new StringWrapper(firstNumber);
    StringWrapper second = new StringWrapper(secondNumber);
    lengthСomparison(first, second);
    firstNumber = first.getValue();
    secondNumber = second.getValue();
    // *******************************
    StringBuffer buffer = new StringBuffer();
    // set minus
    boolean needMinus = false;
    for (int i = 0; i < firstNumber.length(); i++) {
        char c1 = firstNumber.charAt(i);
        char c2 = secondNumber.charAt(i);
        if (c1 < c2 && firstNumber.charAt(0) < secondNumber.charAt(0)) {
            needMinus = true;
            break;
        }
    }
    if (needMinus) {
        String tmp = firstNumber;
        firstNumber = secondNumber;
        secondNumber = tmp;
    }
    // *******************************
    boolean loan = false;
    for (int i = firstNumber.length() - 1; i >= 0; i--) {
        int firstValue = Integer.parseInt(String.valueOf(firstNumber.charAt(i)));
        int secondValue = Integer.parseInt(String.valueOf(secondNumber.charAt(i)));
        if (loan)
            firstValue--;
        if (firstValue < secondValue) {
            firstValue += 10;
            loan = true;
        } else
            loan = false;
        int diff = firstValue - secondValue;
        buffer.append(diff);
    }
    if (needMinus)
        buffer.append('-');
    buffer.reverse();
    StringWrapper wrapper = new StringWrapper(buffer.toString());
    stripZero(wrapper);
    result = wrapper.getValue();
    return result;
}

[Buggy Hunk]
return minusOperation(secondNumber, firstNumber);

[Patch]
return "-" + plusOperation(secondNumber, firstNumber);

[Demonstration 3]

[Buggy Method]
protected String getUserDisplay(User u, WidgetConfig config) {
    return u.getFamilyName() + ", " + u.getGivenName();
}

[Buggy Hunk]
return u.getFamilyName() + ", " + u.getGivenName();

[Patch]
return StringEscapeUtils.escapeHtml(u.getFamilyName() + ", " + u.getGivenName());