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

Commit df750469 authored by Amit Mahajan's avatar Amit Mahajan Committed by android-build-merger
Browse files

Merge "Fix wrong userData length and excessive userData issues" am: 13d5d5a1 am: 487b123d

am: d6a3556d

Change-Id: I2aba632a1b30bc553830bab269e990164a8f40fc
parents 912ca402 d6a3556d
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -22,6 +22,12 @@ import android.annotation.UnsupportedAppUsage;
 * {@hide}
 */
public class EncodeException extends Exception {

    private int mError = ERROR_UNENCODABLE;

    public static final int ERROR_UNENCODABLE = 0;
    public static final int ERROR_EXCEED_SIZE = 1;

    public EncodeException() {
        super();
    }
@@ -31,9 +37,18 @@ public class EncodeException extends Exception {
        super(s);
    }

    public EncodeException(String s, int error) {
        super(s);
        mError = error;
    }

    @UnsupportedAppUsage
    public EncodeException(char c) {
        super("Unencodable char: '" + c + "'");
    }

    public int getError() {
        return mError;
    }
}
+3 −2
Original line number Diff line number Diff line
@@ -388,7 +388,7 @@ public class GsmAlphabet {
     *     GSM extension table
     * @return the encoded message
     *
     * @throws EncodeException if String is too large to encode
     * @throws EncodeException if String is too large to encode or any characters are unencodable
     */
    @UnsupportedAppUsage
    public static byte[] stringToGsm7BitPacked(String data, int startingSeptetOffset,
@@ -402,7 +402,8 @@ public class GsmAlphabet {
        }
        septetCount += startingSeptetOffset;
        if (septetCount > 255) {
            throw new EncodeException("Payload cannot exceed 255 septets");
            throw new EncodeException(
                    "Payload cannot exceed 255 septets", EncodeException.ERROR_EXCEED_SIZE);
        }
        int byteCount = ((septetCount * 7) + 7) / 8;
        byte[] ret = new byte[byteCount + 1];  // Include space for one byte length prefix.
+21 −10
Original line number Diff line number Diff line
@@ -384,18 +384,24 @@ public class SmsMessage extends SmsMessageBase {
                }
            }
        } catch (EncodeException ex) {
            if (ex.getError() == EncodeException.ERROR_EXCEED_SIZE) {
                Rlog.e(LOG_TAG, "Exceed size limitation EncodeException", ex);
                return null;
            } else {
                // Encoding to the 7-bit alphabet failed. Let's see if we can
                // send it as a UCS-2 encoded message
                try {
                    userData = encodeUCS2(message, header);
                    encoding = ENCODING_16BIT;
                } catch (EncodeException ex1) {
                    Rlog.e(LOG_TAG, "Exceed size limitation EncodeException", ex1);
                    return null;
                } catch (UnsupportedEncodingException uex) {
                Rlog.e(LOG_TAG,
                        "Implausible UnsupportedEncodingException ",
                        uex);
                    Rlog.e(LOG_TAG, "Implausible UnsupportedEncodingException ", uex);
                    return null;
                }
            }
        }

        if (encoding == ENCODING_7BIT) {
            if ((0xff & userData[0]) > MAX_USER_DATA_SEPTETS) {
@@ -438,9 +444,10 @@ public class SmsMessage extends SmsMessageBase {
     *
     * @return encoded message as UCS2
     * @throws UnsupportedEncodingException
     * @throws EncodeException if String is too large to encode
     */
    private static byte[] encodeUCS2(String message, byte[] header)
        throws UnsupportedEncodingException {
            throws UnsupportedEncodingException, EncodeException {
        byte[] userData, textPart;
        textPart = message.getBytes("utf-16be");

@@ -455,6 +462,10 @@ public class SmsMessage extends SmsMessageBase {
        else {
            userData = textPart;
        }
        if (userData.length > 255) {
            throw new EncodeException(
                    "Payload cannot exceed 255 bytes", EncodeException.ERROR_EXCEED_SIZE);
        }
        byte[] ret = new byte[userData.length+1];
        ret[0] = (byte) (userData.length & 0xff );
        System.arraycopy(userData, 0, ret, 1, userData.length);