diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-07-10 10:06:25 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-07-10 10:06:25 +0300 |
commit | 2c10e8a3cfff3cc3c12b0359bbfc11c0a7eadecc (patch) | |
tree | deb78ee8830c0a4e2ad246f1b6e18b30ccaacebf /source/blender/editors/io/io_cache.c | |
parent | c055536d23085c2de1c18636e63a64d8c712896f (diff) |
Fix T51052: CacheFile Open crashes from Python
Note that bpy.data access makes more sense here,
but better not crash when called from Python.
Diffstat (limited to 'source/blender/editors/io/io_cache.c')
-rw-r--r-- | source/blender/editors/io/io_cache.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/source/blender/editors/io/io_cache.c b/source/blender/editors/io/io_cache.c index af6f55d7a64..a5e90ebbe7a 100644 --- a/source/blender/editors/io/io_cache.c +++ b/source/blender/editors/io/io_cache.c @@ -97,22 +97,24 @@ static int cachefile_open_exec(bContext *C, wmOperator *op) BLI_strncpy(cache_file->filepath, filename, FILE_MAX); BKE_cachefile_reload(bmain, cache_file); - /* hook into UI */ - PropertyPointerRNA *pprop = op->customdata; - - if (pprop->prop) { - /* when creating new ID blocks, use is already 1, but RNA - * pointer se also increases user, so this compensates it */ - id_us_min(&cache_file->id); - - PointerRNA idptr; - RNA_id_pointer_create(&cache_file->id, &idptr); - RNA_property_pointer_set(&pprop->ptr, pprop->prop, idptr); - RNA_property_update(C, &pprop->ptr, pprop->prop); + /* Will be set when running invoke, not exec directly. */ + if (op->customdata != NULL) { + /* hook into UI */ + PropertyPointerRNA *pprop = op->customdata; + if (pprop->prop) { + /* when creating new ID blocks, use is already 1, but RNA + * pointer se also increases user, so this compensates it */ + id_us_min(&cache_file->id); + + PointerRNA idptr; + RNA_id_pointer_create(&cache_file->id, &idptr); + RNA_property_pointer_set(&pprop->ptr, pprop->prop, idptr); + RNA_property_update(C, &pprop->ptr, pprop->prop); + } + + MEM_freeN(op->customdata); } - MEM_freeN(op->customdata); - return OPERATOR_FINISHED; } |