[Bf-blender-cvs] [218793464d4] gpencil-new-data-proposal: fix comparison function to prevent seg fault if structures are not similar

Amelie Fondevilla noreply at git.blender.org
Mon Dec 5 15:01:20 CET 2022


Commit: 218793464d452a561d160c34d5113a2b3afa9bd2
Author: Amelie Fondevilla
Date:   Mon Dec 5 14:22:04 2022 +0100
Branches: gpencil-new-data-proposal
https://developer.blender.org/rB218793464d452a561d160c34d5113a2b3afa9bd2

fix comparison function to prevent seg fault if structures are not similar

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

M	source/blender/blenkernel/intern/gpencil_new_proposal_test.cc

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

diff --git a/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc b/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc
index 073155500ec..aad705e089b 100644
--- a/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc
+++ b/source/blender/blenkernel/intern/gpencil_new_proposal_test.cc
@@ -126,34 +126,38 @@ static void compare_data_structures(const GPData &ngpd, const bGPdata *ogpd)
   /* Compare Layers */
   EXPECT_EQ(ngpd.layers_size, ogpd->totlayer);
 
-  int offset{-1};
-  LISTBASE_FOREACH (bGPDlayer *, lay, &ogpd->layers) {
-    const ::GPLayer *nlay = &(ngpd.layers_array[++offset]);
+  if (ngpd.layers_size == ogpd->totlayer) {
+    int offset{-1};
+    LISTBASE_FOREACH (bGPDlayer *, lay, &ogpd->layers) {
+      const ::GPLayer *nlay = &(ngpd.layers_array[++offset]);
 
-    // Same name
-    EXPECT_EQ(std::strcmp(nlay->name, lay->info), 0);
+      // Same name
+      EXPECT_EQ(std::strcmp(nlay->name, lay->info), 0);
+    }
   }
 
   /* Compare Frames */
   EXPECT_EQ(ngpd.frames_size, ogpd->totframe);
 
-  // get plain list of frames
-  std::vector<std::pair<int, int>> ogpd_frames;
-  int layer_id{0};
-  LISTBASE_FOREACH (bGPDlayer *, lay, &ogpd->layers) {
-    LISTBASE_FOREACH (bGPDframe *, frm, &lay->frames) {
-      ogpd_frames.emplace_back(layer_id, frm->framenum);
+  if (ngpd.frames_size == ogpd->totframe) {
+    // get plain list of frames
+    std::vector<std::pair<int, int>> ogpd_frames;
+    int layer_id{0};
+    LISTBASE_FOREACH (bGPDlayer *, lay, &ogpd->layers) {
+      LISTBASE_FOREACH (bGPDframe *, frm, &lay->frames) {
+        ogpd_frames.emplace_back(layer_id, frm->framenum);
+      }
+      ++layer_id;
     }
-    ++layer_id;
-  }
 
-  for (int i = 0; i < ngpd.frames_size; i++) {
-    const ::GPFrame *nfrm = ngpd.frames_array + i;
-    int ofrm_layer_index{ogpd_frames[i].first};
-    int ofrm_frame_number{ogpd_frames[i].second};
+    for (int i = 0; i < ngpd.frames_size; i++) {
+      const ::GPFrame *nfrm = ngpd.frames_array + i;
+      int ofrm_layer_index{ogpd_frames[i].first};
+      int ofrm_frame_number{ogpd_frames[i].second};
 
-    EXPECT_EQ(nfrm->layer_index, ofrm_layer_index);
-    EXPECT_EQ(nfrm->start_time, ofrm_frame_number);
+      EXPECT_EQ(nfrm->layer_index, ofrm_layer_index);
+      EXPECT_EQ(nfrm->start_time, ofrm_frame_number);
+    }
   }
 }



More information about the Bf-blender-cvs mailing list