author | skoppar |
Tue, 28 Sep 2010 01:13:22 -0700 | |
changeset 7031 | d77ff2048ad5 |
permissions | -rw-r--r-- |
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 |
} |