[Demonstration 1]

[Buggy Method]
public static BitmapFactory.Options getBitMapOptions(String localImagePath) {
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    //计算出了图片的大小,没有真正的加载
    BitmapFactory.decodeFile(localImagePath, options);
    return options;
}

[Buggy Hunk]
BitmapFactory.Options options = new BitmapFactory.Options();

[Patch]
final BitmapFactory.Options options = new BitmapFactory.Options();

[Demonstration 2]

[Buggy Method]
public static void doSootSetup(String[] args) {
    ArgumentContainer sootOptionsContainer = ArgParser.getSootOptions(args);
    try {
        if (sootOptionsContainer.isVerbose()) {
            L1Logger.setup(Level.ALL);
            L1Logger.getLogger().info("Verbose logging activated");
        } else {
            L1Logger.setup(Level.WARNING);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    //gets the path to java home, here: "/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre"
    String javaHome = System.getProperty("java.home");
    if (javaHome == null) {
        throw new IllegalStateException("System property `java.home' is undefined");
    }
    // Setting the soot classpath
    String classPath = Scene.v().getSootClassPath() + ":.:" + new File(javaHome, "lib/jce.jar").toString() + ":" + new File(javaHome, "lib/rt.jar").toString();
    /*
		String classPath = "."
						   + ":"
						   + new File(javaHome, "lib/jce.jar").toString()
						   + ":"
						   + new File(javaHome, "lib/rt.jar").toString();
						   */
    // Adding the arguments given by the user via the -p flag. See utils.parser.ArgParser
    for (String s : sootOptionsContainer.getAddDirsToClasspath()) {
        classPath = s + ":" + classPath;
    }
    // TODO: why both?
    for (String s : sootOptionsContainer.getAddClassesToClasspath()) {
        classPath += ":" + s;
    }
    // Add the current classpath to soots classpath
    // TODO: this is only a quick hack for testing. We should figure out precicely how the soot classpath should look.
    List<String> cpath = new ArrayList<>();
    // TODO: Lu: I'm also not sure what a "ContextClassLoader" is. (pasted from https://stackoverflow.com/questions/11613988/how-to-get-classpath-from-classloader)
    ClassLoader cxClassloader = Thread.currentThread().getContextClassLoader();
    if (cxClassloader instanceof URLClassLoader) {
        for (URL url : Arrays.asList(((URLClassLoader) (Thread.currentThread().getContextClassLoader())).getURLs())) {
            cpath.add(url.getFile());
        }
    } else {
        throw new RuntimeException("Cannot get URLs needed for the soot classpath from current contextclassloader");
    }
    Scene.v().setSootClassPath(String.join(":", cpath) + ":" + classPath);
    L1Logger.getLogger().info("Soot classpath: " + Scene.v().getSootClassPath());
    // those are needed because of soot-magic i guess
    Scene.v().addBasicClass("analyzer.level2.HandleStmt", SIGNATURES);
    Scene.v().addBasicClass("analyzer.level2.SecurityLevel", SIGNATURES);
}

[Buggy Hunk]
L1Logger.setup(Level.WARNING);

[Patch]
L1Logger.setup(Level.INFO);

[Demonstration 3]

[Buggy Method]
public List<NameableInt> getSongs() {
    return songs;
}

[Buggy Hunk]
public List<NameableInt> getSongs() {

[Patch]
public List<SABName> getSongs() {