diff options
-rw-r--r-- | source/blender/blenkernel/intern/packedFile.c | 11 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 6 |
2 files changed, 15 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/packedFile.c b/source/blender/blenkernel/intern/packedFile.c index 8e647757b40..1085e515b3a 100644 --- a/source/blender/blenkernel/intern/packedFile.c +++ b/source/blender/blenkernel/intern/packedFile.c @@ -141,7 +141,9 @@ int BKE_packedfile_count_all(Main *bmain) void BKE_packedfile_free(PackedFile *pf) { if (pf) { - MEM_freeN(pf->data); + BLI_assert(pf->data != NULL); + + MEM_SAFE_FREE(pf->data); MEM_freeN(pf); } else { @@ -151,6 +153,9 @@ void BKE_packedfile_free(PackedFile *pf) PackedFile *BKE_packedfile_duplicate(const PackedFile *pf_src) { + BLI_assert(pf_src != NULL); + BLI_assert(pf_src->data != NULL); + PackedFile *pf_dst; pf_dst = MEM_dupallocN(pf_src); @@ -161,6 +166,8 @@ PackedFile *BKE_packedfile_duplicate(const PackedFile *pf_src) PackedFile *BKE_packedfile_new_from_memory(void *mem, int memlen) { + BLI_assert(mem != NULL); + PackedFile *pf = MEM_callocN(sizeof(*pf), "PackedFile"); pf->data = mem; pf->size = memlen; @@ -178,7 +185,7 @@ PackedFile *BKE_packedfile_new(ReportList *reports, const char *filename, const /* render result has no filename and can be ignored * any other files with no name can be ignored too */ if (filename[0] == '\0') { - return NULL; + return pf; } // XXX waitcursor(1); diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 609fa9459ee..545659d06c2 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -2829,6 +2829,12 @@ static PackedFile *direct_link_packedfile(FileData *fd, PackedFile *oldpf) if (pf) { pf->data = newpackedadr(fd, pf->data); + if (pf->data == NULL) { + /* We cannot allow a PackedFile with a NULL data field, + * the whole code assumes this is not possible. See T70315. */ + printf("%s: NULL packedfile data, cleaning up...\n", __func__); + MEM_SAFE_FREE(pf); + } } return pf; |