Mercurial > hg > release > icedtea7-forest-2.5 > jdk
changeset 7902:b0c31af6bcec
8037846: Ensure streaming of input cipher streams
Reviewed-by: ascarpino, coffeys, robm, ahgross, asmotrak
author | mbankal |
---|---|
date | Thu, 19 Jun 2014 23:20:26 -0700 |
parents | da1d67ddba4a |
children | 6c865d8ab140 |
files | src/share/classes/javax/crypto/CipherInputStream.java |
diffstat | 1 files changed, 17 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/javax/crypto/CipherInputStream.java Wed Jun 18 09:01:37 2014 -0700 +++ b/src/share/classes/javax/crypto/CipherInputStream.java Thu Jun 19 23:20:26 2014 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -86,6 +86,8 @@ private int ostart = 0; // the offset pointing to the last "new" byte private int ofinish = 0; + // The stream has been read from. False if the stream has never been read. + private boolean read = false; /** * private convenience function. @@ -101,13 +103,15 @@ private int getMoreData() throws IOException { if (done) return -1; int readin = input.read(ibuffer); + read = true; if (readin == -1) { done = true; try { obuffer = cipher.doFinal(); + } catch (IllegalBlockSizeException | BadPaddingException e) { + obuffer = null; + throw new IOException(e); } - catch (IllegalBlockSizeException e) {obuffer = null;} - catch (BadPaddingException e) {obuffer = null;} if (obuffer == null) return -1; else { @@ -118,7 +122,10 @@ } try { obuffer = cipher.update(ibuffer, 0, readin); - } catch (IllegalStateException e) {obuffer = null;}; + } catch (IllegalStateException e) { + obuffer = null; + throw e; + } ostart = 0; if (obuffer == null) ofinish = 0; @@ -298,9 +305,12 @@ // throw away the unprocessed data cipher.doFinal(); } - catch (BadPaddingException ex) { - } - catch (IllegalBlockSizeException ex) { + catch (BadPaddingException | IllegalBlockSizeException ex) { + /* If no data has been read from the stream to be en/decrypted, + we supress any exceptions, and close quietly. */ + if (read) { + throw new IOException(ex); + } } ostart = 0; ofinish = 0;