Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/sun/security/util/DerValue/BadValue.java
41152 views
1
/*
2
* Copyright (c) 2009, 2019, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/*
25
* @test
26
* @bug 6864911
27
* @summary ASN.1/DER input stream parser needs more work
28
* @modules java.base/sun.security.util
29
*/
30
31
import java.io.*;
32
import sun.security.util.*;
33
34
public class BadValue {
35
36
public static void main(String[] args) throws Exception {
37
38
// Test IOUtils.
39
40
// We have 4 bytes
41
InputStream in = new ByteArrayInputStream(new byte[10]);
42
byte[] bs = IOUtils.readExactlyNBytes(in, 4);
43
if (bs.length != 4 || in.available() != 6) {
44
throw new Exception("First read error");
45
}
46
// But only 6 left
47
bs = in.readNBytes(10);
48
if (bs.length != 6 || in.available() != 0) {
49
throw new Exception("Second read error");
50
}
51
// MAX length results in exception
52
in = new ByteArrayInputStream(new byte[10]);
53
try {
54
bs = IOUtils.readExactlyNBytes(in, Integer.MAX_VALUE);
55
throw new Exception("No exception on MAX_VALUE length");
56
} catch (EOFException ex) {
57
// this is expected
58
} catch (IOException ex) {
59
throw ex;
60
}
61
// -1 length results in exception
62
in = new ByteArrayInputStream(new byte[10]);
63
try {
64
bs = IOUtils.readExactlyNBytes(in, -1);
65
throw new Exception("No exception on -1 length");
66
} catch (IOException ex) {
67
// this is expected
68
}
69
70
// 20>10, readAll means failure
71
in = new ByteArrayInputStream(new byte[10]);
72
try {
73
bs = IOUtils.readExactlyNBytes(in, 20);
74
throw new Exception("No exception on EOF");
75
} catch (EOFException e) {
76
// OK
77
}
78
int bignum = 10 * 1024 * 1024;
79
bs = IOUtils.readExactlyNBytes(new SuperSlowStream(bignum), bignum);
80
if (bs.length != bignum) {
81
throw new Exception("Read returned small array");
82
}
83
84
// Test DerValue
85
byte[] input = {0x04, (byte)0x84, 0x40, 0x00, 0x42, 0x46, 0x4b};
86
try {
87
new DerValue(new ByteArrayInputStream(input));
88
} catch (IOException ioe) {
89
// This is OK
90
}
91
}
92
}
93
94
/**
95
* An InputStream contains a given number of bytes, but only returns one byte
96
* per read.
97
*/
98
class SuperSlowStream extends InputStream {
99
private int p;
100
/**
101
* @param Initial capacity
102
*/
103
public SuperSlowStream(int capacity) {
104
p = capacity;
105
}
106
@Override
107
public int read() throws IOException {
108
if (p > 0) {
109
p--;
110
return 0;
111
} else {
112
return -1;
113
}
114
}
115
@Override
116
public int read(byte b[], int off, int len) throws IOException {
117
if (len == 0) return 0;
118
if (p > 0) {
119
p--;
120
b[off] = 0;
121
return 1;
122
} else {
123
return -1;
124
}
125
}
126
}
127
128