[Demonstration 1]

[Buggy Method]
public String updateUserLocation(String line) {
    String[] aux = line.split("_");
    String[] msg1, msg2;
    User user = db.getUserFromSession(Integer.parseInt(aux[1]));
    String[] coords = new String[] { aux[2], aux[3] };
    String[] wifis = new String[0];
    for (int i = 4; i < aux.length; i++) {
        wifis[i - 4] = aux[i];
    }
    msg1 = getMessagesGPS(coords, user);
    msg2 = getMessagesWifi(wifis, user);
    if (msg1 == null) {
        msg1 = msg2;
        if (msg2 == null)
            return "empty";
    }
    String out = msg1[0];
    for (int i = 1; i < msg1.length; i++) {
        out += "_" + aux[i];
    }
    return out;
}

[Buggy Hunk]
String[] wifis = new String[0];

[Patch]
String[] wifis = new String[aux.length-4];

[Demonstration 2]

[Buggy Method]
private String[] capitalizeWordsNotIgnoredInLine(String[] line) {
    ArrayList<String> newLine = new ArrayList<String>(line.length);
    String word;
    for (int i = 0, size = line.length; i < size; ++i) {
        word = line[i];
        if (_ignoredWords.contains(word)) {
            newLine.add(word);
        } else if (word.trim().isEmpty()) {
            continue;
        } else {
            newLine.add(Character.toUpperCase(word.charAt(0)) + (word.substring(1)));
        }
    }
    return newLine.toArray(new String[newLine.size()]);
}

[Buggy Hunk]
word = line[i];

[Patch]
word = line[i].toLowerCase();

[Demonstration 3]

[Buggy Method]
public void receiveMessage() throws Exception {
    this.rcvSocket = new DatagramSocket(portNumber);
    ArrayList<String> incPackets = new ArrayList<String>();
    byte[] rcvData = new byte[100];
    DatagramPacket rcvPkt = new DatagramPacket(rcvData, rcvData.length);
    DatagramPacket sendPkt = null;
    int currSeqNum = Receiver.INIT_SEQ_NUM;
    int lastRcvSeqNum = Receiver.INIT_SEQ_NUM + 1;
    String totalMsg = "";
    while (true) {
        System.out.println("Waiting for packet from server " + serverIP.getHostAddress());
        rcvSocket.receive(rcvPkt);
        int rcvpktsize = rcvPkt.getLength();
        int serverPort = rcvPkt.getPort();
        String message = new String(rcvPkt.getData());
        Scanner scan = new Scanner(message);
        int headerLength = scan.nextLine().length() + 2;
        int sequenceNum = Sender.getSeqNum(message);
        System.out.println("ACK received! Sequence number " + sequenceNum);
        if (slowMode) {
            Thread.sleep(4000);
        }
        if (currSeqNum != sequenceNum) {
            System.out.println("Wrong sequence number.\nExpected " + currSeqNum + " got " + sequenceNum + ".");
            //Resend previous ACK
            System.out.println("Sending ACK with sequence number " + lastRcvSeqNum + " to " + serverIP + " on port " + serverPort);
            String ACK = null;
            ACK = InetAddress.getLocalHost() + Receiver.createACK(lastRcvSeqNum);
            byte[] sendData = new byte[ACK.length()];
            sendData = ACK.getBytes();
            sendPkt = new DatagramPacket(sendData, sendData.length, serverIP, serverPort);
            rcvSocket.send(sendPkt);
            continue;
        }
        //Incremement Sequence Number
        currSeqNum = (currSeqNum + 1) % Receiver.SEQ_NUM_WIN;
        incPackets.add(message.substring(headerLength, rcvpktsize));
        // ACKing Packets
        System.out.println("Sending ACK with sequence number " + sequenceNum + " to " + serverIP + " on port " + serverPort + "\n");
        String ACK = null;
        ACK = InetAddress.getLocalHost() + Receiver.createACK(sequenceNum);
        byte[] sendData = ACK.getBytes();
        sendPkt = new DatagramPacket(sendData, sendData.length, serverIP, serverPort);
        rcvSocket.send(sendPkt);
        if (incPackets.toString().contains("\r\n\r\n\r\n")) {
            totalMsg = Receiver.combinePackets(incPackets);
            totalMsg = totalMsg.substring(0, totalMsg.length() - 1);
            System.out.println("End of message.");
            System.out.println("ArrayList total message: \n{\n" + totalMsg + "\n}");
            System.out.println("ArrayList item size: " + totalMsg.length() + "\n");
            System.out.println("SRV RESPONSE = \n{\n" + totalMsg + "\n}\n");
            break;
        }
    }
    rcvSocket.close();
}

[Buggy Hunk]
if(incPackets.toString().contains("\r\n\r\n\r\n"))

[Patch]
if(Receiver.combinePackets(incPackets).contains("\r\n\r\n\r\n"))