hs_serialized_database_info: check whole input

Most lines of hs_serialized_database_info are not needed,
as the information is provided by db_decode_header.
Moreover, db_decode_header changes its first argument,
so it points to end of header after db_decode_header.
This commit is contained in:
Boris Nagaev 2016-05-29 12:27:11 +03:00 committed by Matthew Barr
parent 373a624bad
commit 66c2a53d33

View File

@ -458,33 +458,16 @@ hs_error_t hs_serialized_database_info(const char *bytes, size_t length,
} }
*info = NULL; *info = NULL;
if (!bytes || length < sizeof(struct hs_database)) { // Decode and check the header
return HS_INVALID; hs_database_t header;
hs_error_t ret = db_decode_header(&bytes, length, &header);
if (ret != HS_SUCCESS) {
return ret;
} }
const u32 *buf = (const u32 *)bytes; u32 mode = unaligned_load_u32(bytes + offsetof(struct RoseEngine, mode));
u32 magic = unaligned_load_u32(buf++); return print_database_string(info, header.version, header.platform, mode);
if (magic != HS_DB_MAGIC) {
return HS_INVALID;
}
u32 version = unaligned_load_u32(buf++);
buf++; /* length */
platform_t plat;
plat = unaligned_load_u64a(buf);
buf += 2;
buf++; /* crc */
buf++; /* reserved 0 */
buf++; /* reserved 1 */
const char *t_raw = (const char *)buf;
u32 mode = unaligned_load_u32(t_raw + offsetof(struct RoseEngine, mode));
return print_database_string(info, version, plat, mode);
} }
HS_PUBLIC_API HS_PUBLIC_API