From 2b633f12adfa759fc81a61e5ec699be29b756267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Fri, 12 Nov 2021 10:50:00 +0100 Subject: Fix crash in asset browser when switching from file browser When the file browser is in asset browser mode, it sets the callback `filelist->prepare_filter_fn` to an asset browser specific function. This function will segfault if there is no current asset library. Switching back from asset browser to file browser would not reset that callback to `NULL`, causing it to be called and crash Blender. This is now fixed. --- source/blender/editors/space_file/filelist.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'source/blender/editors') diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index a1b1c8cc363..e6575316aec 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -914,6 +914,9 @@ static void prepare_filter_asset_library(const FileList *filelist, FileListFilte if (!filter->asset_catalog_filter) { return; } + BLI_assert_msg(filelist->asset_library, + "prepare_filter_asset_library() should only be called when the file browser is " + "in asset browser mode"); file_ensure_updated_catalog_filter_data(filter->asset_catalog_filter, filelist->asset_library); } @@ -1876,11 +1879,13 @@ void filelist_settype(FileList *filelist, short type) case FILE_MAIN: filelist->check_dir_fn = filelist_checkdir_main; filelist->read_job_fn = filelist_readjob_main; + filelist->prepare_filter_fn = NULL; filelist->filter_fn = is_filtered_main; break; case FILE_LOADLIB: filelist->check_dir_fn = filelist_checkdir_lib; filelist->read_job_fn = filelist_readjob_lib; + filelist->prepare_filter_fn = NULL; filelist->filter_fn = is_filtered_lib; break; case FILE_ASSET_LIBRARY: @@ -1900,6 +1905,7 @@ void filelist_settype(FileList *filelist, short type) default: filelist->check_dir_fn = filelist_checkdir_dir; filelist->read_job_fn = filelist_readjob_dir; + filelist->prepare_filter_fn = NULL; filelist->filter_fn = is_filtered_file; break; } -- cgit v1.2.3