Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6ab9a5f authored by Paul Jensen's avatar Paul Jensen Committed by android-build-merger
Browse files

Merge "Fix socket leaks in various android.net.Network methods."

am: 34ce11f2

Change-Id: I1a59fced1f3bcd19bd48150ca215093dff431619
parents 6b9e31d7 34ce11f2
Loading
Loading
Loading
Loading
+33 −7
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import android.system.OsConstants;
import com.android.okhttp.internalandroidapi.Dns;
import com.android.okhttp.internalandroidapi.HttpURLConnectionFactory;

import libcore.io.IoUtils;

import java.io.FileDescriptor;
import java.io.IOException;
import java.net.DatagramSocket;
@@ -136,9 +138,15 @@ public class Network implements Parcelable {
            for (int i = 0; i < hostAddresses.length; i++) {
                try {
                    Socket socket = createSocket();
                    boolean failed = true;
                    try {
                        if (localAddress != null) socket.bind(localAddress);
                        socket.connect(new InetSocketAddress(hostAddresses[i], port));
                        failed = false;
                        return socket;
                    } finally {
                        if (failed) IoUtils.closeQuietly(socket);
                    }
                } catch (IOException e) {
                    if (i == (hostAddresses.length - 1)) throw e;
                }
@@ -155,15 +163,27 @@ public class Network implements Parcelable {
        public Socket createSocket(InetAddress address, int port, InetAddress localAddress,
                int localPort) throws IOException {
            Socket socket = createSocket();
            boolean failed = true;
            try {
                socket.bind(new InetSocketAddress(localAddress, localPort));
                socket.connect(new InetSocketAddress(address, port));
                failed = false;
            } finally {
                if (failed) IoUtils.closeQuietly(socket);
            }
            return socket;
        }

        @Override
        public Socket createSocket(InetAddress host, int port) throws IOException {
            Socket socket = createSocket();
            boolean failed = true;
            try {
                socket.connect(new InetSocketAddress(host, port));
                failed = false;
            } finally {
                if (failed) IoUtils.closeQuietly(socket);
            }
            return socket;
        }

@@ -175,7 +195,13 @@ public class Network implements Parcelable {
        @Override
        public Socket createSocket() throws IOException {
            Socket socket = new Socket();
            boolean failed = true;
            try {
                bindSocket(socket);
                failed = false;
            } finally {
                if (failed) IoUtils.closeQuietly(socket);
            }
            return socket;
        }
    }