Skip to content

Commit f6de34b

Browse files
committed
Mask removal: dt_masks_form_remove() after dt_dev_masks_list_remove()
Fixes: AddressSanitizer: heap-use-after-free on address 0x60e00013d4b4 at pc 0x7fd6409390f3 bp 0x7ffdd90547c0 sp 0x7ffdd90547b8 READ of size 4 at 0x60e00013d4b4 thread T0 #0 0x7fd6409390f2 in dt_ellipse_events_button_released /home/lebedevri/darktable/src/develop/masks/ellipse.c:434 #1 0x7fd64093a8f1 in dt_group_events_button_released /home/lebedevri/darktable/src/develop/masks/group.c:115 #2 0x7fd64093a8f1 in dt_masks_events_button_released /home/lebedevri/darktable/src/develop/masks/masks.c:1199 #3 0x7fd61b64495c in button_released /home/lebedevri/darktable/src/views/darkroom.c:1882 #4 0x7fd6409ad45e in dt_view_manager_button_released /home/lebedevri/darktable/src/views/view.c:569 #5 0x7fd64096918c in button_released /home/lebedevri/darktable/src/gui/gtk.c:665 ... 0x60e00013d4b4 is located 148 bytes inside of 160-byte region [0x60e00013d420,0x60e00013d4c0) freed by thread T0 here: #0 0x7fd640c890da in __interceptor_free (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x940da) #1 0x7fd640935982 in dt_masks_form_remove /home/lebedevri/darktable/src/develop/masks/masks.c:1854 #2 0x7fd6409390c5 in dt_ellipse_events_button_released /home/lebedevri/darktable/src/develop/masks/ellipse.c:433 #3 0x7fd64093a8f1 in dt_group_events_button_released /home/lebedevri/darktable/src/develop/masks/group.c:115 #4 0x7fd64093a8f1 in dt_masks_events_button_released /home/lebedevri/darktable/src/develop/masks/masks.c:1199 #5 0x7fd61b64495c in button_released /home/lebedevri/darktable/src/views/darkroom.c:1882 #6 0x7fd6409ad45e in dt_view_manager_button_released /home/lebedevri/darktable/src/views/view.c:569 #7 0x7fd64096918c in button_released /home/lebedevri/darktable/src/gui/gtk.c:665 #8 0x7fd63ffb5a8c (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0+0x208a8c) previously allocated by thread T0 here: #0 0x7fd640c8937a in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x9437a) #1 0x7fd640915ce3 in dt_masks_create /home/lebedevri/darktable/src/develop/masks/masks.c:777 #2 0x7fd61af68c61 in _add_ellipse /home/lebedevri/darktable/src/iop/spots.c:211 #3 0x7fd63ffb5a8c (/usr/lib/x86_64-linux-gnu/libgtk-3.so.0+0x208a8c) SUMMARY: AddressSanitizer: heap-use-after-free /home/lebedevri/darktable/src/develop/masks/ellipse.c:434 dt_ellipse_events_button_released
1 parent 731f6af commit f6de34b

File tree

5 files changed

+5
-5
lines changed

5 files changed

+5
-5
lines changed

src/develop/masks/brush.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1448,8 +1448,8 @@ static int dt_brush_events_button_pressed(struct dt_iop_module_t *module, float
14481448
}
14491449

14501450
// we remove the shape
1451-
dt_masks_form_remove(module, dt_masks_get_from_id(darktable.develop, parentid), form);
14521451
dt_dev_masks_list_remove(darktable.develop, form->formid, parentid);
1452+
dt_masks_form_remove(module, dt_masks_get_from_id(darktable.develop, parentid), form);
14531453
return 1;
14541454
}
14551455

src/develop/masks/circle.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,8 +271,8 @@ static int dt_circle_events_button_released(struct dt_iop_module_t *module, floa
271271
}
272272

273273
// we remove the shape
274-
dt_masks_form_remove(module, dt_masks_get_from_id(darktable.develop, parentid), form);
275274
dt_dev_masks_list_remove(darktable.develop, form->formid, parentid);
275+
dt_masks_form_remove(module, dt_masks_get_from_id(darktable.develop, parentid), form);
276276
return 1;
277277
}
278278
if(gui->form_dragging)

src/develop/masks/ellipse.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,8 +430,8 @@ static int dt_ellipse_events_button_released(struct dt_iop_module_t *module, flo
430430
}
431431

432432
// we remove the shape
433-
dt_masks_form_remove(module, dt_masks_get_from_id(darktable.develop, parentid), form);
434433
dt_dev_masks_list_remove(darktable.develop, form->formid, parentid);
434+
dt_masks_form_remove(module, dt_masks_get_from_id(darktable.develop, parentid), form);
435435
return 1;
436436
}
437437
if(gui->form_dragging)

src/develop/masks/gradient.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,8 @@ static int dt_gradient_events_button_released(struct dt_iop_module_t *module, fl
222222
}
223223

224224
// we remove the shape
225-
dt_masks_form_remove(module, dt_masks_get_from_id(darktable.develop, parentid), form);
226225
dt_dev_masks_list_remove(darktable.develop, form->formid, parentid);
226+
dt_masks_form_remove(module, dt_masks_get_from_id(darktable.develop, parentid), form);
227227
return 1;
228228
}
229229

src/develop/masks/path.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1238,8 +1238,8 @@ static int dt_path_events_button_pressed(struct dt_iop_module_t *module, float p
12381238
}
12391239

12401240
// we remove the shape
1241-
dt_masks_form_remove(module, dt_masks_get_from_id(darktable.develop, parentid), form);
12421241
dt_dev_masks_list_remove(darktable.develop, form->formid, parentid);
1242+
dt_masks_form_remove(module, dt_masks_get_from_id(darktable.develop, parentid), form);
12431243
return 1;
12441244
}
12451245

0 commit comments

Comments
 (0)