From f88e9b281a513ab6c80a0359cc4a25fa05f66b5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Sun, 15 Jun 2025 10:37:53 +0200 Subject: [PATCH] FEM: Prevent invalid index for data extraction --- src/Mod/Fem/femobjects/post_extract1D.py | 8 ++++++++ src/Mod/Fem/femobjects/post_extract2D.py | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/src/Mod/Fem/femobjects/post_extract1D.py b/src/Mod/Fem/femobjects/post_extract1D.py index 1ffb946acd..f04d90bfad 100644 --- a/src/Mod/Fem/femobjects/post_extract1D.py +++ b/src/Mod/Fem/femobjects/post_extract1D.py @@ -168,6 +168,10 @@ class PostIndexOverFrames1D(base_fempostextractors.Extractor1D): dataset = algo.GetOutputDataObject(0) array = self._x_array_from_dataset(obj, dataset, copy=False) + # safeguard for invalid access + if idx < 0 or array.GetNumberOfTuples()-1 < idx: + raise Exception(f"Invalid index: {idx} is not in range 0 - {array.GetNumberOfTuples()-1}") + if not setup: frame_array.SetNumberOfComponents(array.GetNumberOfComponents()) frame_array.SetNumberOfTuples(len(timesteps)) @@ -179,6 +183,10 @@ class PostIndexOverFrames1D(base_fempostextractors.Extractor1D): dataset = algo.GetOutputDataObject(0) array = self._x_array_from_dataset(obj, dataset, copy=False) + # safeguard for invalid access + if idx < 0 or array.GetNumberOfTuples()-1 < idx: + raise Exception(f"Invalid index: {idx} is not in range 0 - {array.GetNumberOfTuples()-1}") + frame_array.SetNumberOfComponents(array.GetNumberOfComponents()) frame_array.SetNumberOfTuples(1) frame_array.SetTuple(0, idx, array) diff --git a/src/Mod/Fem/femobjects/post_extract2D.py b/src/Mod/Fem/femobjects/post_extract2D.py index 3cb17d8ffc..ed7d0faf47 100644 --- a/src/Mod/Fem/femobjects/post_extract2D.py +++ b/src/Mod/Fem/femobjects/post_extract2D.py @@ -197,6 +197,11 @@ class PostIndexOverFrames2D(base_fempostextractors.Extractor2D): algo.UpdateTimeStep(timestep) dataset = algo.GetOutputDataObject(0) array = self._y_array_from_dataset(obj, dataset, copy=False) + + # safeguard for invalid access + if idx < 0 or array.GetNumberOfTuples()-1 < idx: + raise Exception(f"Invalid index: {idx} is not in range 0 - {array.GetNumberOfTuples()-1}") + if not setup: frame_y_array.SetNumberOfComponents(array.GetNumberOfComponents()) frame_y_array.SetNumberOfTuples(len(timesteps)) @@ -213,6 +218,10 @@ class PostIndexOverFrames2D(base_fempostextractors.Extractor2D): dataset = algo.GetOutputDataObject(0) array = self._y_array_from_dataset(obj, dataset, copy=False) + # safeguard for invalid access + if idx < 0 or array.GetNumberOfTuples()-1 < idx: + raise Exception(f"Invalid index: {idx} is not in range 0 - {array.GetNumberOfTuples()-1}") + frame_y_array.SetNumberOfComponents(array.GetNumberOfComponents()) frame_y_array.SetNumberOfTuples(1) frame_y_array.SetTuple(0, idx, array)