[Demonstration 1]

[Buggy Method]
private void sendPackageInternal(NetworkPackage np, final Device.SendPackageStatusCallback callback, PublicKey key) {
    if (channel == null) {
        Log.e("KDE/sendPackage", "Not yet connected");
        callback.sendFailure(new NotYetConnectedException());
        return;
    }
    try {
        //Prepare socket for the payload
        final ServerSocket server;
        if (np.hasPayload()) {
            server = openTcpSocketOnFreePort(context, deviceId, onSsl);
            JSONObject payloadTransferInfo = new JSONObject();
            payloadTransferInfo.put("port", server.getLocalPort());
            np.setPayloadTransferInfo(payloadTransferInfo);
        } else {
            server = null;
        }
        //Encrypt if key provided
        if (key != null) {
            np = RsaHelper.encrypt(np, key);
        }
        //Send body of the network package
        ChannelFuture future = channel.writeAndFlush(np.serialize()).sync();
        if (!future.isSuccess()) {
            Log.e("KDE/sendPackage", "!future.isWritten()");
            callback.sendFailure(future.cause());
            return;
        }
        //Send payload
        if (server != null) {
            OutputStream socket = null;
            try {
                //Wait a maximum of 10 seconds for the other end to establish a connection with our socket, close it afterwards
                server.setSoTimeout(10 * 1000);
                socket = server.accept().getOutputStream();
                Log.i("KDE/LanLink", "Beginning to send payload");
                byte[] buffer = new byte[4096];
                int bytesRead;
                long progress = 0;
                InputStream stream = np.getPayload();
                while ((bytesRead = stream.read(buffer)) != -1) {
                    //Log.e("ok",""+bytesRead);
                    progress += bytesRead;
                    socket.write(buffer, 0, bytesRead);
                    if (np.getPayloadSize() > 0) {
                        callback.sendProgress((int) (progress / np.getPayloadSize()));
                    }
                }
                socket.flush();
                stream.close();
                Log.i("KDE/LanLink", "Finished sending payload (" + progress + " bytes written)");
            } catch (Exception e) {
                Log.e("KDE/sendPackage", "Exception: " + e);
                callback.sendFailure(e);
                return;
            } finally {
                if (socket != null) {
                    try {
                        socket.close();
                    } catch (Exception e) {
                    }
                }
                try {
                    server.close();
                } catch (Exception e) {
                }
            }
        }
        callback.sendSuccess();
    } catch (Exception e) {
        if (callback != null) {
            callback.sendFailure(e);
        }
    }
}

[Buggy Hunk]
server = openTcpSocketOnFreePort(context, deviceId, onSsl);

[Patch]
server = openTcpSocketOnFreePort(context, getDeviceId(), onSsl);

[Demonstration 2]

[Buggy Method]
private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
    description = (String) stream.readObject();
    deadline = (Date) stream.readObject();
    startDate = (Date) stream.readObject();
    endDate = (Date) stream.readObject();
    check = (boolean) stream.readObject();
}

[Buggy Hunk]
check = (boolean) stream.readObject();

[Patch]
check = ((Boolean) stream.readObject()) ? true : false;

[Demonstration 3]

[Buggy Method]
protected EventInfo findEvent(final BwRequest request, final Rmode mode) throws Throwable {
    Client cl = request.getClient();
    EventInfo ev = null;
    BwCalendar cal = request.getCalendar(true);
    if (cal == null) {
        return null;
    }
    String guid = request.getReqPar("guid");
    String eventName = request.getReqPar("eventName");
    if (guid != null) {
        if (debug) {
            debugMsg("Get event by guid");
        }
        String rid = request.getReqPar("recurrenceId");
        // DORECUR is this right?
        RecurringRetrievalMode rrm;
        if (mode == Rmode.overrides) {
            rrm = RecurringRetrievalMode.overrides;
            rid = null;
        } else if (mode == Rmode.expanded) {
            rrm = RecurringRetrievalMode.expanded;
        } else {
            rrm = new RecurringRetrievalMode(mode);
        }
        Collection<EventInfo> evs = cl.getEvent(cal.getPath(), guid, rid, rrm);
        if (debug) {
            debugMsg("Get event by guid found " + evs.size());
        }
        if (evs.size() == 1) {
            ev = evs.iterator().next();
        } else {
            // XXX this needs dealing with
            warn("Multiple result from getEvent");
        }
    } else if (eventName != null) {
        if (debug) {
            debugMsg("Get event by name");
        }
        ev = cl.getEvent(cal.getPath(), eventName, RecurringRetrievalMode.overrides);
    }
    if (ev == null) {
        request.getForm().getErr().emit(ClientError.unknownEvent, /*eid*/
        guid);
        return null;
    } else if (debug) {
        debugMsg("Get event found " + ev.getEvent());
    }
    return ev;
}

[Buggy Hunk]
} else {

[Patch]
} else if (evs.size() > 1) {