diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2015-02-18 15:00:13 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2015-02-18 15:00:13 +0300 |
commit | de7d0111100f33ecdae039ea218201b4230038b0 (patch) | |
tree | 5793fce3afe2cc96a2a5e22b9b28bcb08685d8f3 /io_scene_fbx | |
parent | 17a28df49c35da5670c2964f29f0768d650a1d0a (diff) |
Fix T43718: FBX: Do not 'crash' importer when there is too much data in a layer.
FBX... Looks like even using the SDK does not avoid many mistakes (I would suspect the countrary, actually).
Diffstat (limited to 'io_scene_fbx')
-rw-r--r-- | io_scene_fbx/import_fbx.py | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/io_scene_fbx/import_fbx.py b/io_scene_fbx/import_fbx.py index ccc5caef..02d7bbc9 100644 --- a/io_scene_fbx/import_fbx.py +++ b/io_scene_fbx/import_fbx.py @@ -702,15 +702,29 @@ def blen_read_geom_layerinfo(fbx_layer): def blen_read_geom_array_setattr(generator, blen_data, blen_attr, fbx_data, stride, item_size, descr, xform): """Generic fbx_layer to blen_data setter, generator is expected to yield tuples (ble_idx, fbx_idx).""" + max_idx = len(blen_data) - 1 + print_error = True + + def check_skip(blen_idx, fbx_idx): + nonlocal print_error + if fbx_idx == -1: + return True + if blen_idx > max_idx: + if print_error: + print("ERROR: too much data in this layer, compared to elements in mesh, skipping!") + print_error = False + return True + return False + if xform is not None: for blen_idx, fbx_idx in generator: - if fbx_idx == -1: + if check_skip(blen_idx, fbx_idx): continue setattr(blen_data[blen_idx], blen_attr, xform(fbx_data[fbx_idx] if (item_size == 1) else fbx_data[fbx_idx:fbx_idx + item_size])) else: for blen_idx, fbx_idx in generator: - if fbx_idx == -1: + if check_skip(blen_idx, fbx_idx): continue setattr(blen_data[blen_idx], blen_attr, fbx_data[fbx_idx] if (item_size == 1) else fbx_data[fbx_idx:fbx_idx + item_size]) |