diff --git a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java index 14c5f4bebebb2..964a31304db59 100644 --- a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java +++ b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java @@ -470,6 +470,9 @@ public class SmsMessage extends SmsMessageBase { int bearerDataLength; SmsEnvelope env = new SmsEnvelope(); CdmaSmsAddress addr = new CdmaSmsAddress(); + // We currently do not parse subaddress in PDU, but it is required when determining + // fingerprint (see getIncomingSmsFingerprint()). + CdmaSmsSubaddress subaddr = new CdmaSmsSubaddress(); try { env.messageType = dis.readInt(); @@ -520,6 +523,7 @@ public class SmsMessage extends SmsMessageBase { // link the filled objects to this SMS mOriginatingAddress = addr; env.origAddress = addr; + env.origSubaddress = subaddr; mEnvelope = env; mPdu = pdu; @@ -1009,8 +1013,11 @@ public class SmsMessage extends SmsMessageBase { output.write(mEnvelope.teleService); output.write(mEnvelope.origAddress.origBytes, 0, mEnvelope.origAddress.origBytes.length); output.write(mEnvelope.bearerData, 0, mEnvelope.bearerData.length); - output.write(mEnvelope.origSubaddress.origBytes, 0, - mEnvelope.origSubaddress.origBytes.length); + // subaddress is not set when parsing some MT SMS. + if (mEnvelope.origSubaddress != null && mEnvelope.origSubaddress.origBytes != null) { + output.write(mEnvelope.origSubaddress.origBytes, 0, + mEnvelope.origSubaddress.origBytes.length); + } return output.toByteArray(); }