From 4e30cfd30603c3bd8e4f7ecdea77cc65ec213d3a Mon Sep 17 00:00:00 2001
From: Philipp Oeser <info@graphics-engineer.com>
Date: Tue, 31 Aug 2021 09:43:04 +0200
Subject: [PATCH] FBX Import: skip invalid custom enum properties

This was (correctly) asserting before, now handle this more gracefully
and just skip (and warn about this) a custom property that has an
invalid value set.

Seems there are a couple of exporters out there that do this wrong, I
think this tradeoff can be made though.

Fixes T91062, T81657, T83501, T86595

Maniphest Tasks: T91062, T86595, T83501, T81657

Differential Revision: https://developer.blender.org/D12354
---
 io_scene_fbx/__init__.py   | 2 +-
 io_scene_fbx/import_fbx.py | 6 ++++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/io_scene_fbx/__init__.py b/io_scene_fbx/__init__.py
index 71ae6ec36..01bc5421b 100644
--- a/io_scene_fbx/__init__.py
+++ b/io_scene_fbx/__init__.py
@@ -21,7 +21,7 @@
 bl_info = {
     "name": "FBX format",
     "author": "Campbell Barton, Bastien Montagne, Jens Restemeier",
-    "version": (4, 22, 0),
+    "version": (4, 23, 0),
     "blender": (2, 90, 0),
     "location": "File > Import-Export",
     "description": "FBX IO meshes, UV's, vertex colors, materials, textures, cameras, lamps and actions",
diff --git a/io_scene_fbx/import_fbx.py b/io_scene_fbx/import_fbx.py
index ec16b6d1a..ba11757aa 100644
--- a/io_scene_fbx/import_fbx.py
+++ b/io_scene_fbx/import_fbx.py
@@ -369,8 +369,10 @@ def blen_read_custom_properties(fbx_obj, blen_obj, settings):
                         val = fbx_prop.props[4]
                         if settings.use_custom_props_enum_as_string and fbx_prop.props[5]:
                             enum_items = fbx_prop.props[5].decode('utf-8', 'replace').split('~')
-                            assert(val >= 0 and val < len(enum_items))
-                            blen_obj[prop_name] = enum_items[val]
+                            if val >= 0 and val < len(enum_items):
+                                blen_obj[prop_name] = enum_items[val]
+                            else:
+                                print ("WARNING: User property '%s' has wrong enum value, skipped" % prop_name)
                         else:
                             blen_obj[prop_name] = val
                     else:
-- 
GitLab