dnie: fixed length checking of uncompressed data

fixes https://oss-fuzz.com/testcase-detail/5632848910614528
This commit is contained in:
Frank Morgner 2020-02-20 10:46:23 +01:00
parent 261e0b6b0d
commit 906108bb69
1 changed files with 2 additions and 3 deletions

View File

@ -944,16 +944,15 @@ static u8 *dnie_uncompress(sc_card_t * card, u8 * from, size_t *len)
sc_log(card->ctx, "alloc() for uncompressed buffer failed"); sc_log(card->ctx, "alloc() for uncompressed buffer failed");
return NULL; return NULL;
} }
*len = uncompressed;
res = sc_decompress(upt, /* try to uncompress by calling sc_xx routine */ res = sc_decompress(upt, /* try to uncompress by calling sc_xx routine */
(size_t *) & uncompressed, len,
from + 8, (size_t) compressed, COMPRESSION_ZLIB); from + 8, (size_t) compressed, COMPRESSION_ZLIB);
/* TODO: check that returned uncompressed size matches expected */
if (res != SC_SUCCESS) { if (res != SC_SUCCESS) {
sc_log(card->ctx, "Uncompress() failed or data not compressed"); sc_log(card->ctx, "Uncompress() failed or data not compressed");
goto compress_exit; /* assume not need uncompression */ goto compress_exit; /* assume not need uncompression */
} }
/* Done; update buffer len and return pt to uncompressed data */ /* Done; update buffer len and return pt to uncompressed data */
*len = uncompressed;
sc_log_hex(card->ctx, "Compressed data", from + 8, compressed); sc_log_hex(card->ctx, "Compressed data", from + 8, compressed);
sc_log_hex(card->ctx, "Uncompressed data", upt, uncompressed); sc_log_hex(card->ctx, "Uncompressed data", upt, uncompressed);
compress_exit: compress_exit: