[Demonstration 1]

[Buggy Method]
protected WXMediaMessage buildSharingMessage(JSONObject params) throws JSONException {
    Log.d(TAG, "Start building message.");
    // media parameters
    WXMediaMessage.IMediaObject mediaObject = null;
    WXMediaMessage wxMediaMessage = new WXMediaMessage();
    if (params.has(KEY_ARG_TEXT)) {
        WXTextObject textObject = new WXTextObject();
        textObject.text = params.getString(KEY_ARG_TEXT);
        mediaObject = textObject;
        wxMediaMessage.description = textObject.text;
    } else {
        JSONObject message = params.getJSONObject(KEY_ARG_MESSAGE);
        JSONObject media = message.getJSONObject(KEY_ARG_MESSAGE_MEDIA);
        wxMediaMessage.title = message.getString(KEY_ARG_MESSAGE_TITLE);
        wxMediaMessage.description = message.getString(KEY_ARG_MESSAGE_DESCRIPTION);
        // thumbnail
        Bitmap thumbnail = getBitmap(message, KEY_ARG_MESSAGE_THUMB);
        if (thumbnail != null) {
            wxMediaMessage.thumbData = Util.bmpToByteArray(thumbnail, true);
        }
        // check types
        int type = media.has(KEY_ARG_MESSAGE_MEDIA_TYPE) ? media.getInt(KEY_ARG_MESSAGE_MEDIA_TYPE) : TYPE_WX_SHARING_WEBPAGE;
        switch(type) {
            case TYPE_WX_SHARING_APP:
                break;
            case TYPE_WX_SHARING_EMOTION:
                break;
            case TYPE_WX_SHARING_FILE:
                break;
            case TYPE_WX_SHARING_IMAGE:
                mediaObject = new WXImageObject();
                String image = getImageURL(message, KEY_ARG_MESSAGE_MEDIA_IMAGE);
                ((WXImageObject) mediaObject).setImagePath(image);
            case TYPE_WX_SHARING_MUSIC:
                break;
            case TYPE_WX_SHARING_VIDEO:
                break;
            case TYPE_WX_SHARING_WEBPAGE:
            default:
                mediaObject = new WXWebpageObject();
                ((WXWebpageObject) mediaObject).webpageUrl = media.getString(KEY_ARG_MESSAGE_MEDIA_WEBPAGEURL);
        }
    }
    wxMediaMessage.mediaObject = mediaObject;
    return wxMediaMessage;
}

[Buggy Hunk]
String image = getImageURL(message, KEY_ARG_MESSAGE_MEDIA_IMAGE);

[Patch]
String image = getImageURL(message.getJSONObject(KEY_ARG_MESSAGE_MEDIA), KEY_ARG_MESSAGE_MEDIA_IMAGE);

[Demonstration 2]

[Buggy Method]
@Override
public Response getAccess(String entityName, String version) {
    List<String> entityNames = new ArrayList<>();
    // accessMap: <role, <operation, List<path>>>
    Map<String, Map<String, List<String>>> accessMap = new HashMap<>();
    if (null != entityName && !entityName.isEmpty()) {
        entityNames.add(entityName);
    } else {
        // force version to be null
        version = null;
        entityNames.addAll(Arrays.asList(getEntityNames()));
    }
    // initialize response, assume will be completely successful
    Response response = new Response();
    response.setStatus(OperationStatus.COMPLETE);
    // for each name get metadata
    for (String name : entityNames) {
        EntityMetadata metadata;
        try {
            metadata = getEntityMetadata(name, version);
        } catch (Exception e) {
            response.setStatus(OperationStatus.PARTIAL);
            // construct error data
            ObjectNode obj = new ObjectNode(JsonNodeFactory.instance);
            obj.put(LITERAL_NAME, name);
            if (null != version) {
                obj.put("version", version);
            }
            List<Error> errors = new ArrayList<>();
            errors.add(Error.get("ERR_NO_METADATA", "Could not get metadata for given input. Error message: " + e.getMessage()));
            DataError error = new DataError(obj, errors);
            response.getDataErrors().add(error);
            // skip to next entity name
            continue;
        }
        EntityAccess ea = metadata.getAccess();
        Map<FieldAccess, Path> fa = new HashMap<>();
        FieldCursor fc = metadata.getFieldCursor();
        // collect field access
        while (fc.next()) {
            FieldTreeNode ftn = fc.getCurrentNode();
            if (ftn instanceof Field) {
                // add access if there is anything to extract later
                Field f = (Field) ftn;
                if (!f.getAccess().getFind().isEmpty() || !f.getAccess().getInsert().isEmpty() || !f.getAccess().getUpdate().isEmpty()) {
                    fa.put(f.getAccess(), f.getFullPath());
                }
            }
        }
        // key is role, value is all associated paths.
        // accessMap: <role, <operation, List<path>>>
        // collect entity access
        helperAddRoles(ea.getDelete().getRoles(), "delete", name, accessMap);
        helperAddRoles(ea.getFind().getRoles(), "find", name, accessMap);
        helperAddRoles(ea.getInsert().getRoles(), "insert", name, accessMap);
        helperAddRoles(ea.getUpdate().getRoles(), "update", name, accessMap);
        // collect field access
        for (Map.Entry<FieldAccess, Path> entry : fa.entrySet()) {
            FieldAccess access = entry.getKey();
            String pathString = name + "." + entry.getValue().toString();
            helperAddRoles(access.getFind().getRoles(), "find", pathString, accessMap);
            helperAddRoles(access.getInsert().getRoles(), "insert", pathString, accessMap);
            helperAddRoles(access.getUpdate().getRoles(), "update", pathString, accessMap);
        }
    }
    // finally, populate response with valid output
    if (!accessMap.isEmpty()) {
        ArrayNode root = new ArrayNode(JsonNodeFactory.instance);
        response.setEntityData(root);
        for (Map.Entry<String, Map<String, List<String>>> entry : accessMap.entrySet()) {
            String role = entry.getKey();
            Map<String, List<String>> opPathMap = entry.getValue();
            ObjectNode roleJson = new ObjectNode(JsonNodeFactory.instance);
            root.add(roleJson);
            roleJson.put("role", role);
            for (Map.Entry<String, List<String>> operationMap : opPathMap.entrySet()) {
                String operation = operationMap.getKey();
                List<String> paths = opPathMap.get(operation);
                ArrayNode pathNode = new ArrayNode(JsonNodeFactory.instance);
                for (String path : paths) {
                    pathNode.add(path);
                }
                roleJson.put(operation, pathNode);
            }
        }
    } else {
        // nothing successful! set status to error
        response.setStatus(OperationStatus.ERROR);
    }
    return response;
}

[Buggy Hunk]
Response response = new Response();

[Patch]
Response response = new Response(JsonNodeFactory.instance);

[Demonstration 3]

[Buggy Method]
public static String downloadPage(final HttpClient httpClient, final HttpGet request) throws IOException {
    LOGGER.info("Downloading " + request.getURI());
    final HttpResponse response = httpClient.execute(request);
    LOGGER.info(response.getStatusLine());
    final HttpEntity entity = response.getEntity();
    if (entity != null) {
        final InputStream in = entity.getContent();
        try {
            final List<String> lines = IOUtils.readLines(in);
            return StringUtils.join(lines, '\n');
        } catch (final IOException e) {
            throw e;
        } catch (final RuntimeException e) {
            request.abort();
            throw e;
        } finally {
            in.close();
        }
    }
    return null;
}

[Buggy Hunk]
final List<String> lines = IOUtils.readLines(in);

[Patch]
final List<String> lines = IOUtils.readLines(in, StandardCharsets.UTF_8);