|
|
|
@ -398,10 +398,18 @@ parseNormalModeParameters(IsoPresentation* self, uint8_t* buffer, int totalLengt
|
|
|
|
|
self->calledPresentationSelector.size = 0;
|
|
|
|
|
self->callingPresentationSelector.size = 0;
|
|
|
|
|
|
|
|
|
|
bool hasUserData = false;
|
|
|
|
|
|
|
|
|
|
while (bufPos < endPos) {
|
|
|
|
|
uint8_t tag = buffer[bufPos++];
|
|
|
|
|
int len;
|
|
|
|
|
|
|
|
|
|
if (bufPos == endPos) {
|
|
|
|
|
if (DEBUG_PRES)
|
|
|
|
|
printf("PRES: invalid message\n");
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bufPos = BerDecoder_decodeLength(buffer, &len, bufPos, endPos);
|
|
|
|
|
|
|
|
|
|
if (bufPos < 0) {
|
|
|
|
@ -458,6 +466,9 @@ parseNormalModeParameters(IsoPresentation* self, uint8_t* buffer, int totalLengt
|
|
|
|
|
if (bufPos < 0)
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
|
|
if (self->nextPayload.size > 0)
|
|
|
|
|
hasUserData = true;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 0x00: /* indefinite length end tag -> ignore */
|
|
|
|
@ -471,6 +482,13 @@ parseNormalModeParameters(IsoPresentation* self, uint8_t* buffer, int totalLengt
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (hasUserData == false) {
|
|
|
|
|
if (DEBUG_PRES)
|
|
|
|
|
printf("PRES: user-data is missing\n");
|
|
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return bufPos;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|