Parameters length is able to be over 127 bytes.
kyunga1.kim [Thu, 16 Aug 2012 11:58:12 +0000 (20:58 +0900)]
When the received message has user data over 127 bytes,
occur the parse error exception because using readByte().
Therefore we use readUnsignedByte() for reading parameters length.
Signed-off-by: kyunga kim <kyunga1.kim@lge.com>
Change-Id: I195807ee59a0d9117e0d835a4b3c355635337be0
(cherry picked from commit 700e7df9a0ac480e688d37786c0c146d5d1e406d)

src/java/com/android/internal/telephony/cdma/SmsMessage.java

index ec155a2..4777cbb 100644 (file)
@@ -488,7 +488,7 @@ public class SmsMessage extends SmsMessageBase {
     private void parsePdu(byte[] pdu) {
         ByteArrayInputStream bais = new ByteArrayInputStream(pdu);
         DataInputStream dis = new DataInputStream(bais);
-        byte length;
+        int length;
         int bearerDataLength;
         SmsEnvelope env = new SmsEnvelope();
         CdmaSmsAddress addr = new CdmaSmsAddress();
@@ -503,7 +503,7 @@ public class SmsMessage extends SmsMessageBase {
             addr.ton = dis.readByte();
             addr.numberPlan = dis.readByte();
 
-            length = dis.readByte();
+            length = dis.readUnsignedByte();
             addr.numberOfDigits = length;
             addr.origBytes = new byte[length];
             dis.read(addr.origBytes, 0, length); // digits
@@ -547,7 +547,7 @@ public class SmsMessage extends SmsMessageBase {
 
             while (dis.available() > 0) {
                 int parameterId = dis.readByte();
-                int parameterLen = dis.readByte();
+                int parameterLen = dis.readUnsignedByte();
                 byte[] parameterData = new byte[parameterLen];
 
                 switch (parameterId) {