diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java index d4ec85a7ebb0b..97f92f4006359 100644 --- a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java +++ b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java @@ -868,13 +868,13 @@ public final class BearerData { inStream.skip(offset); for (int i = 0; i < numFields; i++) { int charCode = inStream.read(7); - if ((charCode >= UserData.ASCII_MAP_BASE_INDEX) || + if ((charCode >= UserData.ASCII_MAP_BASE_INDEX) && (charCode <= UserData.ASCII_MAP_MAX_INDEX)) { strBuf.append(UserData.ASCII_MAP[charCode - UserData.ASCII_MAP_BASE_INDEX]); - } else if (charCode == UserData.ASCII_LF_INDEX) { - strBuf.append('\r'); - } else if (charCode == UserData.ASCII_CR_INDEX) { + } else if (charCode == UserData.ASCII_NL_INDEX) { strBuf.append('\n'); + } else if (charCode == UserData.ASCII_CR_INDEX) { + strBuf.append('\r'); } else { /* For other charCodes, they are unprintable, and so simply use SPACE. */ strBuf.append(' '); diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/UserData.java b/telephony/java/com/android/internal/telephony/cdma/sms/UserData.java index 15cb5e42e2b91..9b6e19d7d674c 100644 --- a/telephony/java/com/android/internal/telephony/cdma/sms/UserData.java +++ b/telephony/java/com/android/internal/telephony/cdma/sms/UserData.java @@ -82,15 +82,15 @@ public class UserData { * Only elements between these indices in the ASCII table are printable. */ public static final int PRINTABLE_ASCII_MIN_INDEX = 0x20; - public static final int ASCII_LF_INDEX = 0x0A; + public static final int ASCII_NL_INDEX = 0x0A; public static final int ASCII_CR_INDEX = 0x0D; public static final SparseIntArray charToAscii = new SparseIntArray(); static { for (int i = 0; i < ASCII_MAP.length; i++) { charToAscii.put(ASCII_MAP[i], PRINTABLE_ASCII_MIN_INDEX + i); } - charToAscii.put('\r', ASCII_LF_INDEX); - charToAscii.put('\n', ASCII_CR_INDEX); + charToAscii.put('\n', ASCII_NL_INDEX); + charToAscii.put('\r', ASCII_CR_INDEX); } /* diff --git a/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java b/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java index 528545ca8841c..365fee8b1c573 100644 --- a/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java +++ b/tests/AndroidTests/src/com/android/unit_tests/CdmaSmsTest.java @@ -145,6 +145,12 @@ public class CdmaSmsTest extends AndroidTestCase { assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding); assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields); assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); + userData.payloadStr = "Test \u007f standard \u0000 SMS"; + revBearerData = BearerData.decode(BearerData.encode(bearerData)); + assertEquals("Test standard SMS", revBearerData.userData.payloadStr); + userData.payloadStr = "Test \n standard \r SMS"; + revBearerData = BearerData.decode(BearerData.encode(bearerData)); + assertEquals(userData.payloadStr, revBearerData.userData.payloadStr); } @SmallTest