- fixed oss-fuzz issues 31399, 31340, 31341, 31344, 31346

pull/320/head
Michael Zillgith 5 years ago
parent 22580c5aa1
commit aac6caaa22

@ -30,7 +30,7 @@ getIndefiniteLength(uint8_t* buffer, int bufPos, int maxBufPos)
int length = 0; int length = 0;
while (bufPos < maxBufPos) { while (bufPos < maxBufPos) {
if ((buffer[bufPos] == 0) && (buffer[bufPos+1] == 0)) { if ((buffer[bufPos] == 0) && ((bufPos + 1) < maxBufPos) && (buffer[bufPos+1] == 0)) {
return length + 2; return length + 2;
} }
else { else {
@ -80,6 +80,9 @@ BerDecoder_decodeLength(uint8_t* buffer, int* length, int bufPos, int maxBufPos)
if (bufPos >= maxBufPos) if (bufPos >= maxBufPos)
return -1; return -1;
if (bufPos + (*length) > maxBufPos)
return -1;
*length <<= 8; *length <<= 8;
*length += buffer[bufPos++]; *length += buffer[bufPos++];
} }

@ -159,6 +159,9 @@ MmsValue_decodeMmsData(uint8_t* buffer, int bufPos, int bufferLength, int* endBu
int dataEndBufPos = bufferLength; int dataEndBufPos = bufferLength;
if (bufferLength < 1)
goto exit_with_error;
uint8_t tag = buffer[bufPos++]; uint8_t tag = buffer[bufPos++];
int dataLength; int dataLength;
@ -168,6 +171,10 @@ MmsValue_decodeMmsData(uint8_t* buffer, int bufPos, int bufferLength, int* endBu
if (bufPos < 0) if (bufPos < 0)
goto exit_with_error; goto exit_with_error;
/* if not indefinite length end tag, data length must be > 0 */
if ((tag != 0) && (dataLength == 0))
goto exit_with_error;
switch (tag) { switch (tag) {
case 0xa1: /* MMS_ARRAY */ case 0xa1: /* MMS_ARRAY */
@ -253,6 +260,7 @@ MmsValue_decodeMmsData(uint8_t* buffer, int bufPos, int bufferLength, int* endBu
value = MmsValue_newUnsigned(dataLength * 8); value = MmsValue_newUnsigned(dataLength * 8);
memcpy(value->value.integer->octets, buffer + bufPos, dataLength); memcpy(value->value.integer->octets, buffer + bufPos, dataLength);
value->value.integer->size = dataLength; value->value.integer->size = dataLength;
bufPos += dataLength; bufPos += dataLength;
break; break;

Loading…
Cancel
Save