Fix: Correctly handle invalid agent port file
[lttng-ust.git] / liblttng-ust-java-agent / java / lttng-ust-agent-common / org / lttng / ust / agent / client / LttngTcpSessiondClient.java
index 793a5f8e0b42cc12038117528376c96caa0134ff..a0adceae6d32b0e9c1f9031b20dc422b07953678 100644 (file)
@@ -21,15 +21,16 @@ package org.lttng.ust.agent.client;
 import java.io.BufferedReader;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
-import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
-import java.io.FileReader;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.lang.management.ManagementFactory;
 import java.net.Socket;
 import java.net.UnknownHostException;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
+import java.nio.charset.Charset;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -45,6 +46,7 @@ public class LttngTcpSessiondClient implements Runnable {
        private static final String SESSION_HOST = "127.0.0.1";
        private static final String ROOT_PORT_FILE = "/var/run/lttng/agent.port";
        private static final String USER_PORT_FILE = "/.lttng/agent.port";
+       private static final Charset PORT_FILE_ENCODING = Charset.forName("UTF-8");
 
        private static final int PROTOCOL_MAJOR_VERSION = 2;
        private static final int PROTOCOL_MINOR_VERSION = 0;
@@ -202,28 +204,34 @@ public class LttngTcpSessiondClient implements Runnable {
         * @return port value if found else 0.
         */
        private static int getPortFromFile(String path) throws IOException {
-               int port;
                BufferedReader br = null;
-               File file = new File(path);
 
                try {
-                       br = new BufferedReader(new FileReader(file));
+                       br = new BufferedReader(new InputStreamReader(new FileInputStream(path), PORT_FILE_ENCODING));
                        String line = br.readLine();
-                       port = Integer.parseInt(line, 10);
+                       if (line == null) {
+                               /* File exists but is empty. */
+                               return 0;
+                       }
+
+                       int port = Integer.parseInt(line, 10);
                        if (port < 0 || port > 65535) {
                                /* Invalid value. Ignore. */
                                port = 0;
                        }
+                       return port;
+
+               } catch (NumberFormatException e) {
+                       /* File contained something that was not a number. */
+                       return 0;
                } catch (FileNotFoundException e) {
                        /* No port available. */
-                       port = 0;
+                       return 0;
                } finally {
                        if (br != null) {
                                br.close();
                        }
                }
-
-               return port;
        }
 
        private void registerToSessiond() throws IOException {
This page took 0.026342 seconds and 4 git commands to generate.