1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
// Copyright (C) 2006, 2007 Red Hat, Inc.
// Written by Gary Benson <gbenson@redhat.com>
// This file is part of Mauve.
// Mauve is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2, or (at your option)
// any later version.
// Mauve is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Mauve; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330,
// Boston, MA 02111-1307, USA.
// Tags: JDK1.2
package gnu.testlet.java.io.ObjectOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.SerializablePermission;
import java.security.Permission;
import gnu.testlet.Testlet;
import gnu.testlet.TestHarness;
import gnu.testlet.TestSecurityManager;
public class security implements Testlet
{
public void test(TestHarness harness)
{
try {
TestObjectOutputStream teststream = new TestObjectOutputStream();
Permission[] enableSubclassImplementation = new Permission[] {
new SerializablePermission("enableSubclassImplementation")};
Permission[] enableSubstitution = new Permission[] {
new SerializablePermission("enableSubstitution")};
Permission[] noPerms = new Permission[] {};
TestSecurityManager sm = new TestSecurityManager(harness);
try {
sm.install();
// throwpoint: java.io.ObjectOutputStream-ObjectOutputStream
harness.checkPoint("constructor");
try {
sm.prepareChecks(enableSubclassImplementation);
new TestObjectOutputStream();
sm.checkAllChecked();
}
catch (SecurityException ex) {
harness.debug(ex);
harness.check(false, "unexpected check");
}
// throwpoint: java.io.ObjectOutputStream-ObjectOutputStream
harness.checkPoint("constructor with outputstream, no overrides");
try {
sm.prepareChecks(noPerms);
new TestObjectOutputStream(new ByteArrayOutputStream());
sm.checkAllChecked();
}
catch (SecurityException ex) {
harness.debug(ex);
harness.check(false, "unexpected check");
}
// throwpoint: java.io.ObjectOutputStream-ObjectOutputStream
harness.checkPoint("constructor with outputstream, putFields override");
try {
sm.prepareChecks(enableSubclassImplementation);
new TestObjectOutputStream2(new ByteArrayOutputStream());
sm.checkAllChecked();
}
catch (SecurityException ex) {
harness.debug(ex);
harness.check(false, "unexpected check");
}
// throwpoint: java.io.ObjectOutputStream-ObjectOutputStream
harness.checkPoint("constructor with outputstream, writeUnshared overrides");
try {
sm.prepareChecks(enableSubclassImplementation);
new TestObjectOutputStream3(new ByteArrayOutputStream());
sm.checkAllChecked();
}
catch (SecurityException ex) {
harness.debug(ex);
harness.check(false, "unexpected check");
}
// throwpoint: java.io.ObjectOutputStream-enableReplaceObject
harness.checkPoint("enableReplaceObject");
try {
sm.prepareChecks(noPerms);
teststream.testEnableReplaceObject(false);
sm.checkAllChecked();
}
catch (SecurityException ex) {
harness.debug(ex);
harness.check(false, "unexpected check");
}
try {
sm.prepareChecks(enableSubstitution);
teststream.testEnableReplaceObject(true);
sm.checkAllChecked();
}
catch (SecurityException ex) {
harness.debug(ex);
harness.check(false, "unexpected check");
}
}
finally {
sm.uninstall();
}
}
catch (Exception ex) {
harness.debug(ex);
harness.check(false, "Unexpected exception");
}
}
private static class TestObjectOutputStream extends ObjectOutputStream
{
public TestObjectOutputStream() throws IOException
{
super();
}
public TestObjectOutputStream(OutputStream out) throws IOException
{
super(out);
}
public boolean testEnableReplaceObject(boolean enable)
{
return enableReplaceObject(enable);
}
}
private static class TestObjectOutputStream2 extends ObjectOutputStream
{
public TestObjectOutputStream2(OutputStream out) throws IOException
{
super(out);
}
public ObjectOutputStream.PutField putFields() throws IOException
{
return null;
}
}
private static class TestObjectOutputStream3 extends ObjectOutputStream
{
public TestObjectOutputStream3(OutputStream out) throws IOException
{
super(out);
}
public void writeUnshared(Object obj) throws IOException
{
}
}
}
|