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

Commit cc378470 authored by xutianguo's avatar xutianguo Committed by Myles Watson
Browse files

OPP: catch IllegalArgumentException exception to avoid FC



Obex HeaderSet will throw IllegalArgumentException when the
file size is bigger than 0xFFFFFFFFL.
Sometimes user try to share a oversize file with Bluetooth,
Bluetooth APP will forceclose if we don't handle this exception.

Bug: 65272955
Test: Try to share some oversize files with Bluetooth, no FC
observed, instead of informing error message.

Change-Id: I0934536387e926bc70d759acf4b77b5c3d936c8f
Signed-off-by: default avatarxutianguo <xutianguo@xiaomi.com>
parent b805ffe8
Loading
Loading
Loading
Loading
+18 −10
Original line number Original line Diff line number Diff line
@@ -53,6 +53,7 @@ import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStream;
import java.lang.IllegalArgumentException;
import java.lang.Thread;
import java.lang.Thread;


/**
/**
@@ -341,16 +342,7 @@ public class BluetoothOppObexClientSession implements BluetoothOppObexSession {
            int status = BluetoothShare.STATUS_SUCCESS;
            int status = BluetoothShare.STATUS_SUCCESS;
            Uri contentUri = Uri.parse(BluetoothShare.CONTENT_URI + "/" + mInfo.mId);
            Uri contentUri = Uri.parse(BluetoothShare.CONTENT_URI + "/" + mInfo.mId);
            ContentValues updateValues;
            ContentValues updateValues;
            HeaderSet request;
            HeaderSet request = new HeaderSet();
            request = new HeaderSet();
            request.setHeader(HeaderSet.NAME, fileInfo.mFileName);
            request.setHeader(HeaderSet.TYPE, fileInfo.mMimetype);

            applyRemoteDeviceQuirks(request, mInfo.mDestination, fileInfo.mFileName);

            Constants.updateShareStatus(mContext1, mInfo.mId, BluetoothShare.STATUS_RUNNING);

            request.setHeader(HeaderSet.LENGTH, fileInfo.mLength);
            ClientOperation putOperation = null;
            ClientOperation putOperation = null;
            OutputStream outputStream = null;
            OutputStream outputStream = null;
            InputStream inputStream = null;
            InputStream inputStream = null;
@@ -359,8 +351,24 @@ public class BluetoothOppObexClientSession implements BluetoothOppObexSession {
                    mWaitingForRemote = true;
                    mWaitingForRemote = true;
                }
                }
                try {
                try {
                    if (V) Log.v(TAG, "Set header items for " + fileInfo.mFileName);
                    request.setHeader(HeaderSet.NAME, fileInfo.mFileName);
                    request.setHeader(HeaderSet.TYPE, fileInfo.mMimetype);

                    applyRemoteDeviceQuirks(request, mInfo.mDestination, fileInfo.mFileName);
                    Constants.updateShareStatus(
                            mContext1, mInfo.mId, BluetoothShare.STATUS_RUNNING);

                    request.setHeader(HeaderSet.LENGTH, fileInfo.mLength);

                    if (V) Log.v(TAG, "put headerset for " + fileInfo.mFileName);
                    if (V) Log.v(TAG, "put headerset for " + fileInfo.mFileName);
                    putOperation = (ClientOperation)mCs.put(request);
                    putOperation = (ClientOperation)mCs.put(request);
                } catch (IllegalArgumentException e) {
                    status = BluetoothShare.STATUS_OBEX_DATA_ERROR;
                    Constants.updateShareStatus(mContext1, mInfo.mId, status);

                    Log.e(TAG, "Error setting header items for request: " + e);
                    error = true;
                } catch (IOException e) {
                } catch (IOException e) {
                    status = BluetoothShare.STATUS_OBEX_DATA_ERROR;
                    status = BluetoothShare.STATUS_OBEX_DATA_ERROR;
                    Constants.updateShareStatus(mContext1, mInfo.mId, status);
                    Constants.updateShareStatus(mContext1, mInfo.mId, status);