jdk/test/java/io/Serializable/6966692/Attack.java
author skoppar
Tue, 28 Sep 2010 01:13:22 -0700
changeset 7031 d77ff2048ad5
permissions -rw-r--r--
6966692: defaultReadObject can set a field multiple times Reviewed-by: hawtin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7031
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
     1
/*
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
     2
 * @test
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
     3
 * @bug 6966692
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
     4
 * @summary  defaultReadObject can set a field multiple times
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
     5
 * @run shell Test6966692.sh
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
     6
*/
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
     7
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
     8
import java.io.*;
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
     9
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    10
public class Attack {
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    11
    public static void main(String[] args) throws Exception {
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    12
        attack(setup());
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    13
    }
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    14
    /** Returned data has Victim with two aaaa fields. */
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    15
    private static byte[] setup() throws Exception {
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    16
        Victim victim = new Victim();
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    17
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    18
        ObjectOutputStream out = new ObjectOutputStream(byteOut);
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    19
        out.writeObject(victim);
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    20
        out.close();
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    21
        byte[] data = byteOut.toByteArray();
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    22
        String str = new String(data, 0); // hibyte is 0
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    23
        str = str.replaceAll("bbbb", "aaaa");
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    24
        str.getBytes(0, data.length, data, 0); // ignore hibyte
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    25
        return data;
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    26
    }
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    27
    private static void attack(byte[] data) throws Exception {
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    28
        ObjectInputStream in = new ObjectInputStream(
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    29
            new ByteArrayInputStream(data)
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    30
        );
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    31
        Victim victim = (Victim)in.readObject();
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    32
        System.out.println(victim+" "+victim.aaaa);
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    33
    }
d77ff2048ad5 6966692: defaultReadObject can set a field multiple times
skoppar
parents:
diff changeset
    34
}