if (need_extra && NPUBIN_META_EXTRA (meta->magiccode) > 0) {
npubin_meta *new_meta;
- new_meta = (npubin_meta *) realloc (meta, NPUBIN_META_TOTAL_SIZE(meta->magiccode));
+ new_meta = (npubin_meta *) malloc (NPUBIN_META_TOTAL_SIZE(meta->magiccode));
if (!new_meta) {
logerr (TAG, "Failed to allocate extra metadata\n");
goto exit_free;
}
- ret = fread (new_meta->reserved_extra, 1, NPUBIN_META_EXTRA_SIZE (meta->magiccode), fp);
- if (ret != NPUBIN_META_EXTRA_SIZE (meta->magiccode)) {
+ memcpy (new_meta, meta, NPUBIN_META_TOTAL_SIZE(meta->magiccode));
+ free (meta);
+ meta = nullptr;
+ ret = fread (new_meta->reserved_extra, 1, NPUBIN_META_EXTRA_SIZE (new_meta->magiccode), fp);
+ if (ret != NPUBIN_META_EXTRA_SIZE (new_meta->magiccode)) {
logerr (TAG, "Invalid extra metadata provided\n");
free (new_meta);
goto exit_err;