[Bf-extensions-cvs] [de7d011] master: Fix T43718: FBX: Do not 'crash' importer when there is too much data in a layer.

Bastien Montagne noreply at git.blender.org
Wed Feb 18 13:01:53 CET 2015


Commit: de7d0111100f33ecdae039ea218201b4230038b0
Author: Bastien Montagne
Date:   Wed Feb 18 13:00:13 2015 +0100
Branches: master
https://developer.blender.org/rBAde7d0111100f33ecdae039ea218201b4230038b0

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).

===================================================================

M	io_scene_fbx/import_fbx.py

===================================================================

diff --git a/io_scene_fbx/import_fbx.py b/io_scene_fbx/import_fbx.py
index ccc5cae..02d7bbc 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])



More information about the Bf-extensions-cvs mailing list