< prev index next >

src/java.base/share/classes/java/util/jar/JarVerifier.java

Print this page
8206863: A closed JarVerifier.VerifierStream should throw IOException
Reviewed-by: rasbold
Contributed-by: Tobias Thierer <tobiast@google.com>, Martin Buchholz <martinrb@google.com>

@@ -435,21 +435,22 @@
         VerifierStream(Manifest man,
                        JarEntry je,
                        InputStream is,
                        JarVerifier jv) throws IOException
         {
-            this.is = is;
+            this.is = Objects.requireNonNull(is);
             this.jv = jv;
             this.mev = new ManifestEntryVerifier(man);
             this.jv.beginEntry(je, mev);
             this.numLeft = je.getSize();
             if (this.numLeft == 0)
                 this.jv.update(-1, this.mev);
         }
 
         public int read() throws IOException
         {
+            ensureOpen();
             if (numLeft > 0) {
                 int b = is.read();
                 jv.update(b, mev);
                 numLeft--;
                 if (numLeft == 0)

@@ -459,10 +460,11 @@
                 return -1;
             }
         }
 
         public int read(byte b[], int off, int len) throws IOException {
+            ensureOpen();
             if ((numLeft > 0) && (numLeft < len)) {
                 len = (int)numLeft;
             }
 
             if (numLeft > 0) {

@@ -486,13 +488,19 @@
             mev = null;
             jv = null;
         }
 
         public int available() throws IOException {
+            ensureOpen();
             return is.available();
         }
 
+        private void ensureOpen() throws IOException {
+            if (is == null) {
+                throw new IOException("stream closed");
+            }
+        }
     }
 
     // Extended JavaUtilJarAccess CodeSource API Support
 
     private Map<URL, Map<CodeSigner[], CodeSource>> urlToCodeSourceMap = new HashMap<>();
< prev index next >