Index: dimension.c =================================================================== --- dimension.c (revision 28785) +++ dimension.c (revision 28786) @@ -37,6 +37,13 @@ double x1, y1, x2, y2, len, dx, dy; } dimension; +static void pcb_dimension_del_pre(pcb_subc_t *subc) +{ + pcb_trace("dim del_pre\n"); + free(subc->extobj_data); + subc->extobj_data = NULL; +} + static int dimension_update_src(dimension *dim, pcb_any_obj_t *edit) { dim->valid = 0; @@ -287,6 +294,8 @@ pcb_trace("let's do it!\n"); edit_obj = pcb_extobj_get_editobj_by_attr(subc); + if (edit_obj == NULL) + return; dimension_clear(subc); dim->displace = d; dimension_gen(subc, edit_obj); @@ -311,5 +320,6 @@ pcb_dimension_edit_geo, pcb_dimension_float_pre, pcb_dimension_float_geo, - pcb_dimension_chg_attr + pcb_dimension_chg_attr, + pcb_dimension_del_pre }; Index: line_of_vias.c =================================================================== --- line_of_vias.c (revision 28785) +++ line_of_vias.c (revision 28786) @@ -35,6 +35,13 @@ double len, dx, dy; } line_of_vias; +static void pcb_line_of_vias_del_pre(pcb_subc_t *subc) +{ + pcb_trace("LoV del_pre\n"); + free(subc->extobj_data); + subc->extobj_data = NULL; +} + static void line_of_vias_udpate_line(line_of_vias *lov, pcb_line_t *line) { lov->x1 = line->Point1.X; @@ -184,6 +191,8 @@ pcb_trace("LoV chg_attr\n"); if (strncmp(key, "extobj::", 8) == 0) { pcb_any_obj_t *edit_obj = pcb_extobj_get_editobj_by_attr(subc); + if (edit_obj == NULL) + return; line_of_vias_clear(subc); line_of_vias_unpack(subc); line_of_vias_gen(subc, edit_obj); @@ -199,5 +208,6 @@ pcb_line_of_vias_edit_geo, NULL, /* float_pre */ NULL, /* float_geo */ - pcb_line_of_vias_chg_attr + pcb_line_of_vias_chg_attr, + pcb_line_of_vias_del_pre };