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:
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: