star-cad

Geometric operators for computer-aided design
git clone git://git.meso-star.fr/star-cad.git
Log | Files | Refs | README | LICENSE

commit 790c892d8281b91d1b8ae7aaf184d26c2e63920f
parent 06b32fca67e47db9d8e4c3c4a5ed17feda9ecfc7
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Fri,  9 Sep 2022 09:59:07 +0200

Fix invalid free on some error paths

Diffstat:
Msrc/scad_geometry.c | 37+++++++++++++++++++------------------
1 file changed, 19 insertions(+), 18 deletions(-)

diff --git a/src/scad_geometry.c b/src/scad_geometry.c @@ -77,7 +77,7 @@ scad_geometry_create end: str_release(&str_name); - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; return res; error: if(geom) { @@ -200,7 +200,7 @@ scad_geometries_partition_core ERR(device_register_tags(geom)); exit: - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; if(data1) free(data1); if(data2) free(data2); if(mapn) free(mapn); @@ -350,7 +350,7 @@ scad_add_rectangle ERR(device_register_tags(geom)); exit: - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; return res; error: if(geom) { @@ -393,7 +393,7 @@ scad_add_disk ERR(device_register_tags(geom)); exit: - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; return res; error: if(geom) { @@ -460,7 +460,7 @@ scad_add_polygon ERR(device_register_tags(geom)); exit: - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; if(points) free(points); if(lines) free(lines); return res; @@ -505,7 +505,7 @@ scad_add_box ERR(device_register_tags(geom)); exit: - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; return res; error: if(geom) { @@ -551,7 +551,7 @@ scad_add_cylinder ERR(device_register_tags(geom)); exit: - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; return res; error: if(geom) { @@ -594,7 +594,7 @@ scad_add_sphere ERR(device_register_tags(geom)); exit: - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; return res; error: if(geom) { @@ -648,7 +648,7 @@ scad_fuse_geometries ERR(device_register_tags(geom)); exit: - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; if(data1) free(data1); if(data2) free(data2); if(mapn) free(mapn); @@ -710,7 +710,7 @@ scad_cut_geometries ERR(device_register_tags(geom)); exit: - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; if(data1) free(data1); if(data2) free(data2); if(mapn) free(mapn); @@ -772,7 +772,7 @@ scad_intersect_geometries ERR(device_register_tags(geom)); exit: - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; if(data1) free(data1); if(data2) free(data2); if(mapn) free(mapn); @@ -806,8 +806,8 @@ scad_geometries_common_boundaries int* data1 = NULL; int* data2 = NULL; int ierr = 0; - int* bound1; - int* bound2; + int* bound1 = NULL; + int* bound2 = NULL; size_t n1, n2; struct scad_geometry* geom = NULL; res_T res = RES_OK; @@ -841,7 +841,7 @@ scad_geometries_common_boundaries ERR(device_register_tags(geom)); exit: - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; if(data1) free(data1); if(data2) free(data2); if(bound1) free(bound1); @@ -949,7 +949,7 @@ scad_geometry_extrude ERR(device_register_tags(extrude_geom)); exit: - *out_geometry = extrude_geom; + if(out_geometry) *out_geometry = extrude_geom; if(tagout) free(tagout); return res; error: @@ -994,6 +994,7 @@ scad_geometry_copy ERR(device_register_tags(*copy)); exit: + if(out_geometry) *out_geometry = copy; return res; error: goto exit; @@ -1118,7 +1119,7 @@ scad_geometry_boundary ERR(device_register_tags(geom)); exit: - *out_geometry = geom; + if(out_geometry) *out_geometry = geom; return res; error: if(geom) { @@ -1183,8 +1184,8 @@ scad_step_import } exit: - *out_geometry_n = ga_sz ; - *out_geometry = geom_array; + if(out_geometry_n) *out_geometry_n = ga_sz ; + if(out_geometry) *out_geometry = geom_array; if(name_initialized) str_release(&strname); return res; error: