Ensure I/O streams are closed when done in GuacamoleHTTPTunnelServlet.

This commit is contained in:
Michael Jumper
2013-01-29 15:00:12 -08:00
parent fbe1339623
commit 0705f7099f

View File

@@ -279,7 +279,12 @@ public abstract class GuacamoleHTTPTunnelServlet extends HttpServlet {
response.setContentType("application/octet-stream");
response.setHeader("Cache-Control", "no-cache");
Writer out = new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8"));
// Get writer for response
Writer out = new BufferedWriter(new OutputStreamWriter(
response.getOutputStream(), "UTF-8"));
// Stream data to response, ensuring output stream is closed
try {
// Detach tunnel and throw error if EOF (and we haven't sent any
// data yet.
@@ -313,6 +318,12 @@ public abstract class GuacamoleHTTPTunnelServlet extends HttpServlet {
out.write("0.;");
out.flush();
response.flushBuffer();
}
// Always close output stream
finally {
out.close();
}
}
catch (GuacamoleException e) {
@@ -375,16 +386,33 @@ public abstract class GuacamoleHTTPTunnelServlet extends HttpServlet {
// Send data
try {
// Get writer from tunnel
GuacamoleWriter writer = tunnel.acquireWriter();
Reader input = new InputStreamReader(request.getInputStream(), "UTF-8");
// Get input reader for HTTP stream
Reader input = new InputStreamReader(
request.getInputStream(), "UTF-8");
// Transfer data from input stream to tunnel output, ensuring
// input is always closed
try {
// Buffer
int length;
char[] buffer = new char[8192];
int length;
// Transfer data using buffer
while (tunnel.isOpen() &&
(length = input.read(buffer, 0, buffer.length)) != -1)
writer.write(buffer, 0, length);
}
// Close input stream in all cases
finally {
input.close();
}
}
catch (IOException e) {