GUACAMOLE-362: Deal correctly with return value when reading the key.
Project: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/commit/3d091411 Tree: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/tree/3d091411 Diff: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/diff/3d091411 Branch: refs/heads/master Commit: 3d091411f3290aaee37be1d0cf82dfeeea23bc15 Parents: ab41f44 Author: Nick Couchman <vn...@apache.org> Authored: Sun Oct 1 07:15:19 2017 -0400 Committer: Nick Couchman <nick.couch...@yahoo.com> Committed: Fri Oct 27 13:05:13 2017 -0400 ---------------------------------------------------------------------- .../properties/PrivateKeyGuacamoleProperty.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/3d091411/guacamole-ext/src/main/java/org/apache/guacamole/properties/PrivateKeyGuacamoleProperty.java ---------------------------------------------------------------------- diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/properties/PrivateKeyGuacamoleProperty.java b/guacamole-ext/src/main/java/org/apache/guacamole/properties/PrivateKeyGuacamoleProperty.java index 174f183..c360f4b 100644 --- a/guacamole-ext/src/main/java/org/apache/guacamole/properties/PrivateKeyGuacamoleProperty.java +++ b/guacamole-ext/src/main/java/org/apache/guacamole/properties/PrivateKeyGuacamoleProperty.java @@ -53,8 +53,22 @@ public abstract class PrivateKeyGuacamoleProperty implements GuacamoleProperty<P // Open and read the file specified in the configuration. File keyFile = new File(value); InputStream keyInput = new BufferedInputStream(new FileInputStream(keyFile)); - final byte[] keyBytes = new byte[(int) keyFile.length()]; - keyInput.read(keyBytes); + int keyLength = (int) keyFile.length(); + final byte[] keyBytes = new byte[keyLength]; + int keyRead = keyInput.read(keyBytes); + + // Error reading any bytes out of the key. + if (keyRead == -1) + throw new GuacamoleServerException("Failed to get any bytes while reading key."); + + // Zero-sized key + else if(keyRead == 0) + throw new GuacamoleServerException("Failed to ready key because key is empty."); + + // Fewer bytes read than contained in the key + else if (keyRead < keyLength) + throw new GuacamoleServerException("Unable to read the full length of the key."); + keyInput.close(); // Set up decryption infrastructure