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

Commit 85c4f02c authored by Zhihai Xu's avatar Zhihai Xu Committed by Matthew Xie
Browse files

NPE in BluetoothSocket.write()

If calling connect succeed, we should not see this NPE.
An IOException may happen after call BluetoothSocket.connect.
If you still call write after the IOException,
you will get this NPE.
add NPE protection for possible wrong calling sequence from application,
To make bluetoothSocket more error-tolerant.

bug:12104154
Change-Id: I7fa4e847b500ca9b9d2a43df432f31a1bb016c0a
parent b4422d23
Loading
Loading
Loading
Loading
+14 −13
Original line number Diff line number Diff line
@@ -417,12 +417,13 @@ public final class BluetoothSocket implements Closeable {
     *             if an i/o error occurs.
     */
    /*package*/ void flush() throws IOException {
        if (mSocketOS == null) throw new IOException("flush is called on null OutputStream");
        if (VDBG) Log.d(TAG, "flush: " + mSocketOS);
        mSocketOS.flush();
    }

    /*package*/ int read(byte[] b, int offset, int length) throws IOException {

        if (mSocketIS == null) throw new IOException("read is called on null InputStream");
        if (VDBG) Log.d(TAG, "read in:  " + mSocketIS + " len: " + length);
        int ret = mSocketIS.read(b, offset, length);
        if(ret < 0)
@@ -432,7 +433,7 @@ public final class BluetoothSocket implements Closeable {
    }

    /*package*/ int write(byte[] b, int offset, int length) throws IOException {

        if (mSocketOS == null) throw new IOException("write is called on null OutputStream");
        if (VDBG) Log.d(TAG, "write: " + mSocketOS + " length: " + length);
        mSocketOS.write(b, offset, length);
        // There is no good way to confirm since the entire process is asynchronous anyway