From 917c231d51eac313ae0e503d2a33aeb034f9b9b1 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Wed, 21 Oct 2020 14:32:59 +0100 Subject: [PATCH] flush gzipped streams in finally and try-catch --- .../core/connection/ConnectionAcceptor.groovy | 38 +++++++++++-------- .../muwire/core/search/ResultsSender.groovy | 9 +++-- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/core/src/main/groovy/com/muwire/core/connection/ConnectionAcceptor.groovy b/core/src/main/groovy/com/muwire/core/connection/ConnectionAcceptor.groovy index 66d3b6f5..28c12a45 100644 --- a/core/src/main/groovy/com/muwire/core/connection/ConnectionAcceptor.groovy +++ b/core/src/main/groovy/com/muwire/core/connection/ConnectionAcceptor.groovy @@ -349,6 +349,7 @@ class ConnectionAcceptor { } private void processBROWSE(Endpoint e) { + DataOutputStream dos = null try { byte [] rowse = new byte[7] DataInputStream dis = new DataInputStream(e.getInputStream()) @@ -388,7 +389,7 @@ class ConnectionAcceptor { os.write("\r\n".getBytes(StandardCharsets.US_ASCII)) - DataOutputStream dos = new DataOutputStream(new GZIPOutputStream(os)) + dos = new DataOutputStream(new GZIPOutputStream(os)) JsonOutput jsonOutput = new JsonOutput() sharedFiles.each { it.hit(browser, System.currentTimeMillis(), "Browse Host"); @@ -398,16 +399,17 @@ class ConnectionAcceptor { dos.writeShort((short)json.length()) dos.write(json.getBytes(StandardCharsets.US_ASCII)) } - dos.flush() - try { - dos.close() - } catch (Exception ignored) {} } finally { + try { + dos?.flush() + dos?.close() + } catch (Exception ignored) {} e.close() } } private void processTRUST(Endpoint e) { + DataOutputStream dos = null try { byte[] RUST = new byte[6] DataInputStream dis = new DataInputStream(e.getInputStream()) @@ -431,7 +433,7 @@ class ConnectionAcceptor { List good = new ArrayList<>(trustService.good.values()) List bad = new ArrayList<>(trustService.bad.values()) - DataOutputStream dos = new DataOutputStream(os) + dos = new DataOutputStream(os) if (!json) { os.write("\r\n".getBytes(StandardCharsets.US_ASCII)) @@ -474,13 +476,16 @@ class ConnectionAcceptor { } } - dos.flush() } finally { + try { + dos?.flush() + } catch (IOException ignore) {} e.close() } } private void processCERTIFICATES(Endpoint e) { + DataOutputStream dos = null try { byte [] ERTIFICATES = new byte[12] DataInputStream dis = new DataInputStream(e.getInputStream()) @@ -516,7 +521,7 @@ class ConnectionAcceptor { os.write("Count: ${certs.size()}\r\n".getBytes(StandardCharsets.US_ASCII)) os.write("\r\n".getBytes(StandardCharsets.US_ASCII)) - DataOutputStream dos = new DataOutputStream(os) + dos = new DataOutputStream(os) certs.each { ByteArrayOutputStream baos = new ByteArrayOutputStream() it.write(baos) @@ -524,10 +529,10 @@ class ConnectionAcceptor { dos.writeShort(payload.length) dos.write(payload) } - try { - dos.close() - } catch (Exception ignored) {} } finally { + try { + dos?.close() + } catch (Exception ignored) {} e.close() } } @@ -542,6 +547,7 @@ class ConnectionAcceptor { } private void processFEED(Endpoint e) { + DataOutputStream dos = null try { byte[] EED = new byte[5]; DataInputStream dis = new DataInputStream(e.getInputStream()) @@ -576,7 +582,7 @@ class ConnectionAcceptor { os.write("Count: ${published.size()}\r\n".getBytes(StandardCharsets.US_ASCII)); os.write("\r\n".getBytes(StandardCharsets.US_ASCII)) - DataOutputStream dos = new DataOutputStream(new GZIPOutputStream(os)) + dos = new DataOutputStream(new GZIPOutputStream(os)) JsonOutput jsonOutput = new JsonOutput() final long now = System.currentTimeMillis(); published.each { @@ -587,11 +593,11 @@ class ConnectionAcceptor { dos.writeShort((short)json.length()) dos.write(json.getBytes(StandardCharsets.US_ASCII)) } - dos.flush() - try { - dos.close() - } catch(Exception ignore) {} } finally { + try { + dos?.flush() + dos?.close() + } catch(Exception ignore) {} e.close() } } diff --git a/core/src/main/groovy/com/muwire/core/search/ResultsSender.groovy b/core/src/main/groovy/com/muwire/core/search/ResultsSender.groovy index b6c6438b..3ffca923 100644 --- a/core/src/main/groovy/com/muwire/core/search/ResultsSender.groovy +++ b/core/src/main/groovy/com/muwire/core/search/ResultsSender.groovy @@ -131,6 +131,7 @@ class ResultsSender { endpoint?.close() } } else { + DataOutputStream dos = null try { endpoint = connector.connect(target) OutputStream os = endpoint.getOutputStream() @@ -142,7 +143,7 @@ class ResultsSender { boolean feed = settings.fileFeed && settings.advertiseFeed os.write("Feed: $feed\r\n".getBytes(StandardCharsets.US_ASCII)) os.write("\r\n".getBytes(StandardCharsets.US_ASCII)) - DataOutputStream dos = new DataOutputStream(new GZIPOutputStream(os)) + dos = new DataOutputStream(new GZIPOutputStream(os)) results.each { int certificates = certificateManager.getByInfoHash(new InfoHash(it.getRoot())).size() def obj = sharedFileToObj(it, settings.browseFiles, certificates) @@ -150,10 +151,10 @@ class ResultsSender { dos.writeShort((short)json.length()) dos.write(json.getBytes(StandardCharsets.US_ASCII)) } - try { - dos.close() - } catch (Exception ignore) {} } finally { + try { + dos?.close() + } catch (Exception ignore) {} endpoint?.close() } }