From fa3ccb97113f6fefe0dc6ff083f1d6b48eb7aac2 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 27 Dec 2014 14:04:10 -0800 Subject: [PATCH 1/5] GUAC-969: Fix possible NPE in GuacamoleClassLoader, if the contents of the lib directory cannot be listed. --- .../guacamole/net/basic/GuacamoleClassLoader.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/GuacamoleClassLoader.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/GuacamoleClassLoader.java index d499fc1ac..218d01396 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/GuacamoleClassLoader.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/GuacamoleClassLoader.java @@ -105,7 +105,7 @@ public class GuacamoleClassLoader extends ClassLoader { // Get list of URLs for all .jar's in the lib directory Collection jarURLs = new ArrayList(); - for (File file : libDirectory.listFiles(new FilenameFilter() { + File[] files = libDirectory.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { @@ -115,13 +115,17 @@ public class GuacamoleClassLoader extends ClassLoader { } - })) { + }); + + // Verify directory was successfully read + if (files == null) + throw new GuacamoleException("Unable to read contents of directory " + libDirectory); + + // Add the URL for each .jar to the jar URL list + for (File file : files) { try { - - // Add URL for the .jar to the jar URL list jarURLs.add(file.toURI().toURL()); - } catch (MalformedURLException e) { throw new GuacamoleException(e); From 46fd8119b93319e5174e6950a155da8fb908101c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 27 Dec 2014 14:08:27 -0800 Subject: [PATCH 2/5] GUAC-969: Test filters can be static. --- .../guacamole/protocol/FilteredGuacamoleReaderTest.java | 2 +- .../guacamole/protocol/FilteredGuacamoleWriterTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/guacamole-common/src/test/java/org/glyptodon/guacamole/protocol/FilteredGuacamoleReaderTest.java b/guacamole-common/src/test/java/org/glyptodon/guacamole/protocol/FilteredGuacamoleReaderTest.java index a03b65e07..40d6e0305 100644 --- a/guacamole-common/src/test/java/org/glyptodon/guacamole/protocol/FilteredGuacamoleReaderTest.java +++ b/guacamole-common/src/test/java/org/glyptodon/guacamole/protocol/FilteredGuacamoleReaderTest.java @@ -40,7 +40,7 @@ public class FilteredGuacamoleReaderTest { /** * Filter which allows through "yes" instructions but drops all others. */ - private class TestFilter implements GuacamoleFilter { + private static class TestFilter implements GuacamoleFilter { @Override public GuacamoleInstruction filter(GuacamoleInstruction instruction) throws GuacamoleException { diff --git a/guacamole-common/src/test/java/org/glyptodon/guacamole/protocol/FilteredGuacamoleWriterTest.java b/guacamole-common/src/test/java/org/glyptodon/guacamole/protocol/FilteredGuacamoleWriterTest.java index c47a75624..4e7bd7d2d 100644 --- a/guacamole-common/src/test/java/org/glyptodon/guacamole/protocol/FilteredGuacamoleWriterTest.java +++ b/guacamole-common/src/test/java/org/glyptodon/guacamole/protocol/FilteredGuacamoleWriterTest.java @@ -40,7 +40,7 @@ public class FilteredGuacamoleWriterTest { /** * Filter which allows through "yes" instructions but drops all others. */ - private class TestFilter implements GuacamoleFilter { + private static class TestFilter implements GuacamoleFilter { @Override public GuacamoleInstruction filter(GuacamoleInstruction instruction) throws GuacamoleException { From 473a0fd35d9f6ee0fff260ef5a4688ffb8c96e57 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 27 Dec 2014 14:14:37 -0800 Subject: [PATCH 3/5] GUAC-969: Fix possible NPE in XML parsing. --- .../java/org/glyptodon/guacamole/xml/DocumentHandler.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/xml/DocumentHandler.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/xml/DocumentHandler.java index 7f16a9916..bc77ad412 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/xml/DocumentHandler.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/xml/DocumentHandler.java @@ -140,8 +140,13 @@ public class DocumentHandler extends DefaultHandler { public void characters(char[] ch, int start, int length) throws SAXException { + // Get current state + DocumentHandlerState current = getCurrentState(); + if (current == null) + throw new SAXException("Character data not allowed outside XML document."); + // Append received chunk to text content - getCurrentState().getTextContent().append(ch, start, length); + current.getTextContent().append(ch, start, length); } From d2b45d1cdb1a9830be7b87c2d3ed3456b5a6186e Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 27 Dec 2014 14:42:06 -0800 Subject: [PATCH 4/5] GUAC-969: Fix possible NPE in reading of local environment. --- .../glyptodon/guacamole/environment/LocalEnvironment.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/guacamole-ext/src/main/java/org/glyptodon/guacamole/environment/LocalEnvironment.java b/guacamole-ext/src/main/java/org/glyptodon/guacamole/environment/LocalEnvironment.java index c96f0dd4d..5421bceec 100644 --- a/guacamole-ext/src/main/java/org/glyptodon/guacamole/environment/LocalEnvironment.java +++ b/guacamole-ext/src/main/java/org/glyptodon/guacamole/environment/LocalEnvironment.java @@ -239,6 +239,12 @@ public class LocalEnvironment implements Environment { } ); + // Warn if directory contents are not available + if (files == null) { + logger.error("Unable to read contents of \"{}\".", protocol_directory.getAbsolutePath()); + files = new File[0]; + } + // Load each protocol from each file for (File file : files) { From 15229ee4b1fd73b198bfceb00a153d12ab9a84fc Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 27 Dec 2014 14:46:44 -0800 Subject: [PATCH 5/5] GUAC-969: Remove unused variables. --- .../basic/rest/connection/ConnectionRESTService.java | 11 ----------- .../connectiongroup/ConnectionGroupRESTService.java | 1 - 2 files changed, 12 deletions(-) diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connection/ConnectionRESTService.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connection/ConnectionRESTService.java index e9633054b..22890db0c 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connection/ConnectionRESTService.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connection/ConnectionRESTService.java @@ -37,7 +37,6 @@ import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import org.glyptodon.guacamole.GuacamoleClientException; import org.glyptodon.guacamole.GuacamoleException; -import org.glyptodon.guacamole.GuacamoleResourceNotFoundException; import org.glyptodon.guacamole.net.auth.Connection; import org.glyptodon.guacamole.net.auth.ConnectionGroup; import org.glyptodon.guacamole.net.auth.ConnectionRecord; @@ -130,11 +129,6 @@ public class ConnectionRESTService { UserContext userContext = authenticationService.getUserContext(authToken); - // Get the connection directory - ConnectionGroup rootGroup = userContext.getRootConnectionGroup(); - Directory connectionDirectory = - rootGroup.getConnectionDirectory(); - // Retrieve the requested connection Connection connection = retrievalService.retrieveConnection(userContext, connectionID); @@ -171,11 +165,6 @@ public class ConnectionRESTService { UserContext userContext = authenticationService.getUserContext(authToken); - // Get the connection directory - ConnectionGroup rootGroup = userContext.getRootConnectionGroup(); - Directory connectionDirectory = - rootGroup.getConnectionDirectory(); - // Retrieve the requested connection's history Connection connection = retrievalService.retrieveConnection(userContext, connectionID); return connection.getHistory(); diff --git a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connectiongroup/ConnectionGroupRESTService.java b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connectiongroup/ConnectionGroupRESTService.java index 226ba8f9d..028e71536 100644 --- a/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connectiongroup/ConnectionGroupRESTService.java +++ b/guacamole/src/main/java/org/glyptodon/guacamole/net/basic/rest/connectiongroup/ConnectionGroupRESTService.java @@ -111,7 +111,6 @@ public class ConnectionGroupRESTService { throws GuacamoleException { User self = userContext.self(); - ConnectionGroup rootGroup = userContext.getRootConnectionGroup(); // Retrieve specified connection group ConnectionGroup connectionGroup;