Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2019-10-01 21:02:57 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2019-10-01 21:08:04 +0300
commitb1b4e0007663f3430754d522e888b8dedfc850f9 (patch)
tree1aa70cb02e889eabc223d5a0ffcbfc028060f619 /source/blender/blenkernel/intern/packedFile.c
parent8dd9172aa23b28fb092fd2324937f2358be81343 (diff)
Fix T70315: Blender exit with code `-6` with message `Attempt to free NULL pointer`.
This is not actually fixing the real issue here, PackedFile structs are never supposed to have a NULL pointer - and in that monster .blend file, the pointer is not NULL, but the actual data chunk has been lost somehow, so it gets NULL during read process. Very unlikely we ever know how such corrupted .blend was created though (there's probably a fair chance that this is not even due to a bug in Blender, but rather a glitch in filesystem or something). So for now, ensure at read time that we get a coherent state (i.e. remove any read PackedFile that would have a NULL data field), and add a few asserts in relevant code to check we never get NULL data pointer here.
Diffstat (limited to 'source/blender/blenkernel/intern/packedFile.c')
-rw-r--r--source/blender/blenkernel/intern/packedFile.c11
1 files changed, 9 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);