* grub-core/lib/xzembed/xz_dec_stream.c: Remove variable length arrays.
This commit is contained in:
parent
9e34a34e44
commit
2def66169e
2 changed files with 32 additions and 38 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
2013-11-12 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/lib/xzembed/xz_dec_stream.c: Remove variable length arrays.
|
||||||
|
|
||||||
2013-11-12 Vladimir Serbinenko <phcoder@gmail.com>
|
2013-11-12 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* grub-core/io/lzopio.c: Remove variable length arrays.
|
* grub-core/io/lzopio.c: Remove variable length arrays.
|
||||||
|
|
|
@ -456,23 +456,22 @@ static enum xz_ret dec_stream_header(struct xz_dec *s)
|
||||||
|
|
||||||
if (s->crc32)
|
if (s->crc32)
|
||||||
{
|
{
|
||||||
uint64_t hash_context[(s->crc32->contextsize + 7) / 8];
|
|
||||||
uint8_t resulthash[s->crc32->mdlen];
|
|
||||||
uint8_t readhash[4];
|
uint8_t readhash[4];
|
||||||
|
uint8_t computed_hash[4];
|
||||||
|
|
||||||
s->crc32->init(hash_context);
|
if(4 != s->crc32->mdlen)
|
||||||
s->crc32->write(hash_context,s->temp.buf + HEADER_MAGIC_SIZE, 2);
|
return XZ_DATA_ERROR;
|
||||||
s->crc32->final(hash_context);
|
|
||||||
|
grub_crypto_hash (s->crc32, computed_hash,
|
||||||
|
s->temp.buf + HEADER_MAGIC_SIZE, 2);
|
||||||
|
|
||||||
grub_memcpy (resulthash, s->crc32->read(hash_context),
|
|
||||||
s->crc32->mdlen);
|
|
||||||
readhash[0] = s->temp.buf[HEADER_MAGIC_SIZE + 5];
|
readhash[0] = s->temp.buf[HEADER_MAGIC_SIZE + 5];
|
||||||
readhash[1] = s->temp.buf[HEADER_MAGIC_SIZE + 4];
|
readhash[1] = s->temp.buf[HEADER_MAGIC_SIZE + 4];
|
||||||
readhash[2] = s->temp.buf[HEADER_MAGIC_SIZE + 3];
|
readhash[2] = s->temp.buf[HEADER_MAGIC_SIZE + 3];
|
||||||
readhash[3] = s->temp.buf[HEADER_MAGIC_SIZE + 2];
|
readhash[3] = s->temp.buf[HEADER_MAGIC_SIZE + 2];
|
||||||
|
|
||||||
if(4 != s->crc32->mdlen
|
if (grub_memcmp (readhash, computed_hash,
|
||||||
|| grub_memcmp (readhash, resulthash, s->crc32->mdlen) != 0)
|
s->crc32->mdlen) != 0)
|
||||||
return XZ_DATA_ERROR;
|
return XZ_DATA_ERROR;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -561,23 +560,22 @@ static enum xz_ret dec_stream_footer(struct xz_dec *s)
|
||||||
#ifndef GRUB_EMBED_DECOMPRESSOR
|
#ifndef GRUB_EMBED_DECOMPRESSOR
|
||||||
if (s->crc32)
|
if (s->crc32)
|
||||||
{
|
{
|
||||||
uint64_t hash_context[(s->crc32->contextsize + 7) / 8];
|
|
||||||
uint8_t resulthash[s->crc32->mdlen];
|
|
||||||
uint8_t readhash[4];
|
uint8_t readhash[4];
|
||||||
|
uint8_t computed_hash[4];
|
||||||
|
|
||||||
s->crc32->init(hash_context);
|
if (4 != s->crc32->mdlen)
|
||||||
s->crc32->write(hash_context,s->temp.buf + 4, 6);
|
return XZ_DATA_ERROR;
|
||||||
s->crc32->final(hash_context);
|
|
||||||
|
grub_crypto_hash (s->crc32, computed_hash,
|
||||||
|
s->temp.buf + 4, 6);
|
||||||
|
|
||||||
grub_memcpy (resulthash, s->crc32->read(hash_context),
|
|
||||||
s->crc32->mdlen);
|
|
||||||
readhash[0] = s->temp.buf[3];
|
readhash[0] = s->temp.buf[3];
|
||||||
readhash[1] = s->temp.buf[2];
|
readhash[1] = s->temp.buf[2];
|
||||||
readhash[2] = s->temp.buf[1];
|
readhash[2] = s->temp.buf[1];
|
||||||
readhash[3] = s->temp.buf[0];
|
readhash[3] = s->temp.buf[0];
|
||||||
|
|
||||||
if(4 != s->crc32->mdlen
|
if(grub_memcmp (readhash, computed_hash,
|
||||||
|| grub_memcmp (readhash, resulthash, s->crc32->mdlen) != 0)
|
s->crc32->mdlen) != 0)
|
||||||
return XZ_DATA_ERROR;
|
return XZ_DATA_ERROR;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -616,23 +614,21 @@ static enum xz_ret dec_block_header(struct xz_dec *s)
|
||||||
#ifndef GRUB_EMBED_DECOMPRESSOR
|
#ifndef GRUB_EMBED_DECOMPRESSOR
|
||||||
if (s->crc32)
|
if (s->crc32)
|
||||||
{
|
{
|
||||||
uint64_t hash_context[(s->crc32->contextsize + 7) / 8];
|
uint8_t readhash[4], computed_hash[4];
|
||||||
uint8_t resulthash[s->crc32->mdlen];
|
|
||||||
uint8_t readhash[4];
|
|
||||||
|
|
||||||
s->crc32->init(hash_context);
|
if(4 != s->crc32->mdlen)
|
||||||
s->crc32->write(hash_context,s->temp.buf, s->temp.size);
|
return XZ_DATA_ERROR;
|
||||||
s->crc32->final(hash_context);
|
|
||||||
|
grub_crypto_hash (s->crc32, computed_hash,
|
||||||
|
s->temp.buf, s->temp.size);
|
||||||
|
|
||||||
grub_memcpy (resulthash, s->crc32->read(hash_context),
|
|
||||||
s->crc32->mdlen);
|
|
||||||
readhash[3] = s->temp.buf[s->temp.size];
|
readhash[3] = s->temp.buf[s->temp.size];
|
||||||
readhash[2] = s->temp.buf[s->temp.size + 1];
|
readhash[2] = s->temp.buf[s->temp.size + 1];
|
||||||
readhash[1] = s->temp.buf[s->temp.size + 2];
|
readhash[1] = s->temp.buf[s->temp.size + 2];
|
||||||
readhash[0] = s->temp.buf[s->temp.size + 3];
|
readhash[0] = s->temp.buf[s->temp.size + 3];
|
||||||
|
|
||||||
if(4 != s->crc32->mdlen
|
if(grub_memcmp (readhash, computed_hash,
|
||||||
|| grub_memcmp (readhash, resulthash, s->crc32->mdlen) != 0)
|
s->crc32->mdlen) != 0)
|
||||||
return XZ_DATA_ERROR;
|
return XZ_DATA_ERROR;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -847,21 +843,15 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b)
|
||||||
#ifndef GRUB_EMBED_DECOMPRESSOR
|
#ifndef GRUB_EMBED_DECOMPRESSOR
|
||||||
if (s->hash)
|
if (s->hash)
|
||||||
{
|
{
|
||||||
uint8_t block_hash[s->hash->mdlen];
|
|
||||||
uint8_t index_hash[s->hash->mdlen];
|
|
||||||
/* Compare the hashes to validate the Index field. */
|
/* Compare the hashes to validate the Index field. */
|
||||||
s->hash->final(s->block.hash.hash_context);
|
s->hash->final(s->block.hash.hash_context);
|
||||||
s->hash->final(s->index.hash.hash_context);
|
s->hash->final(s->index.hash.hash_context);
|
||||||
grub_memcpy (block_hash,
|
|
||||||
s->hash->read(s->block.hash.hash_context),
|
|
||||||
s->hash->mdlen);
|
|
||||||
grub_memcpy (index_hash,
|
|
||||||
s->hash->read(s->index.hash.hash_context),
|
|
||||||
s->hash->mdlen);
|
|
||||||
|
|
||||||
if (s->block.hash.unpadded != s->index.hash.unpadded
|
if (s->block.hash.unpadded != s->index.hash.unpadded
|
||||||
|| s->block.hash.uncompressed != s->index.hash.uncompressed
|
|| s->block.hash.uncompressed != s->index.hash.uncompressed
|
||||||
|| grub_memcmp (block_hash, index_hash, s->hash->mdlen) != 0)
|
|| grub_memcmp (s->hash->read(s->block.hash.hash_context),
|
||||||
|
s->hash->read(s->index.hash.hash_context),
|
||||||
|
s->hash->mdlen) != 0)
|
||||||
return XZ_DATA_ERROR;
|
return XZ_DATA_ERROR;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue