Skip to content

Commit b60e164

Browse files
authored
v.info: Fix Resource Leak Issues (#5515)
1 parent bbc66fb commit b60e164

File tree

2 files changed

+45
-39
lines changed

2 files changed

+45
-39
lines changed

vector/v.info/level1.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ int level_one_info(struct Map_info *Map)
2626
Cats = Vect_new_cats_struct();
2727

2828
Vect_rewind(Map);
29+
const char *mname = Vect_get_full_name(Map);
2930
G_message(_("Topology not available for vector map <%s>. "
3031
"Registering primitives..."),
31-
Vect_get_full_name(Map));
32+
mname);
33+
G_free((void *)mname);
3234
while (TRUE) {
3335
/* register line */
3436
type = Vect_read_next_line(Map, Points, Cats);

vector/v.info/print.c

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,9 @@ void print_shell(struct Map_info *Map, const char *field_opt,
315315
}
316316

317317
map_type = Vect_maptype(Map);
318+
const char *maptype_str = Vect_maptype_info(Map);
319+
char *finfo_lname = Vect_get_finfo_layer_name(Map);
320+
const char *geom_type = Vect_get_finfo_geometry_type(Map);
318321

319322
char scale_tmp[18];
320323
snprintf(scale_tmp, 18, "1:%d", Vect_get_scale(Map));
@@ -381,30 +384,26 @@ void print_shell(struct Map_info *Map, const char *field_opt,
381384
case PLAIN:
382385
break;
383386
case SHELL:
384-
fprintf(stdout, "format=%s,%s\n", Vect_maptype_info(Map),
387+
fprintf(stdout, "format=%s,%s\n", maptype_str,
385388
Vect_get_finfo_format_info(Map));
386-
fprintf(stdout, "ogr_layer=%s\n", Vect_get_finfo_layer_name(Map));
389+
fprintf(stdout, "ogr_layer=%s\n", finfo_lname);
387390
fprintf(stdout, "ogr_dsn=%s\n", Vect_get_finfo_dsn_name(Map));
388-
fprintf(stdout, "feature_type=%s\n",
389-
Vect_get_finfo_geometry_type(Map));
391+
fprintf(stdout, "feature_type=%s\n", geom_type);
390392
break;
391393
case JSON:
392-
json_object_set_string(root_object, "format",
393-
Vect_maptype_info(Map));
394+
json_object_set_string(root_object, "format", maptype_str);
394395
json_object_set_string(root_object, "format-detail",
395396
Vect_get_finfo_format_info(Map));
396-
json_object_set_string(root_object, "ogr_layer",
397-
Vect_get_finfo_layer_name(Map));
397+
json_object_set_string(root_object, "ogr_layer", finfo_lname);
398398
json_object_set_string(root_object, "ogr_dsn",
399399
Vect_get_finfo_dsn_name(Map));
400-
json_object_set_string(root_object, "feature_type",
401-
Vect_get_finfo_geometry_type(Map));
400+
json_object_set_string(root_object, "feature_type", geom_type);
402401
break;
403402
}
404403
}
405404
else if (map_type == GV_FORMAT_POSTGIS) {
406405
int topo_format;
407-
char *toposchema_name, *topogeom_column;
406+
char *toposchema_name = NULL, *topogeom_column = NULL;
408407
const struct Format_info *finfo;
409408

410409
finfo = Vect_get_finfo(Map);
@@ -413,27 +412,23 @@ void print_shell(struct Map_info *Map, const char *field_opt,
413412
case PLAIN:
414413
break;
415414
case SHELL:
416-
fprintf(stdout, "format=%s,%s\n", Vect_maptype_info(Map),
415+
fprintf(stdout, "format=%s,%s\n", maptype_str,
417416
Vect_get_finfo_format_info(Map));
418-
fprintf(stdout, "pg_table=%s\n", Vect_get_finfo_layer_name(Map));
417+
fprintf(stdout, "pg_table=%s\n", finfo_lname);
419418
fprintf(stdout, "pg_dbname=%s\n", Vect_get_finfo_dsn_name(Map));
420419
fprintf(stdout, "geometry_column=%s\n", finfo->pg.geom_column);
421-
fprintf(stdout, "feature_type=%s\n",
422-
Vect_get_finfo_geometry_type(Map));
420+
fprintf(stdout, "feature_type=%s\n", geom_type);
423421
break;
424422
case JSON:
425-
json_object_set_string(root_object, "format",
426-
Vect_maptype_info(Map));
423+
json_object_set_string(root_object, "format", maptype_str);
427424
json_object_set_string(root_object, "format-detail",
428425
Vect_get_finfo_format_info(Map));
429-
json_object_set_string(root_object, "pg_table",
430-
Vect_get_finfo_layer_name(Map));
426+
json_object_set_string(root_object, "pg_table", finfo_lname);
431427
json_object_set_string(root_object, "pg_dbname",
432428
Vect_get_finfo_dsn_name(Map));
433429
json_object_set_string(root_object, "geometry_column",
434430
finfo->pg.geom_column);
435-
json_object_set_string(root_object, "feature_type",
436-
Vect_get_finfo_geometry_type(Map));
431+
json_object_set_string(root_object, "feature_type", geom_type);
437432
break;
438433
}
439434

@@ -455,17 +450,18 @@ void print_shell(struct Map_info *Map, const char *field_opt,
455450
break;
456451
}
457452
}
453+
G_free(topogeom_column);
454+
G_free(toposchema_name);
458455
}
459456
else {
460457
switch (format) {
461458
case PLAIN:
462459
break;
463460
case SHELL:
464-
fprintf(stdout, "format=%s\n", Vect_maptype_info(Map));
461+
fprintf(stdout, "format=%s\n", maptype_str);
465462
break;
466463
case JSON:
467-
json_object_set_string(root_object, "format",
468-
Vect_maptype_info(Map));
464+
json_object_set_string(root_object, "format", maptype_str);
469465
break;
470466
}
471467
}
@@ -524,6 +520,7 @@ void print_shell(struct Map_info *Map, const char *field_opt,
524520
break;
525521
}
526522
}
523+
Vect_destroy_field_info(fi);
527524
}
528525
}
529526

@@ -549,6 +546,9 @@ void print_shell(struct Map_info *Map, const char *field_opt,
549546
json_object_set_string(root_object, "comment", Vect_get_comment(Map));
550547
break;
551548
}
549+
G_free(finfo_lname);
550+
G_free((void *)maptype_str);
551+
G_free((void *)geom_type);
552552
}
553553

554554
void print_info(struct Map_info *Map)
@@ -563,6 +563,9 @@ void print_info(struct Map_info *Map)
563563

564564
time_ok = first_time_ok = second_time_ok = FALSE;
565565
map_type = Vect_maptype(Map);
566+
const char *maptype_str = Vect_maptype_info(Map);
567+
char *finfo_lname = Vect_get_finfo_layer_name(Map);
568+
const char *geom_type = Vect_get_finfo_geometry_type(Map);
566569

567570
/* Check the Timestamp */
568571
time_ok = G_read_vector_timestamp(Vect_get_name(Map), NULL, "", &ts);
@@ -612,37 +615,34 @@ void print_info(struct Map_info *Map)
612615
divider('|');
613616

614617
if (map_type == GV_FORMAT_OGR || map_type == GV_FORMAT_OGR_DIRECT) {
615-
G_saprintf(line, "%-17s%s (%s)", _("Map format:"),
616-
Vect_maptype_info(Map), Vect_get_finfo_format_info(Map));
618+
G_saprintf(line, "%-17s%s (%s)", _("Map format:"), maptype_str,
619+
Vect_get_finfo_format_info(Map));
617620
printline(line);
618621

619622
/* for OGR format print also datasource and layer */
620-
G_saprintf(line, "%-17s%s", _("OGR layer:"),
621-
Vect_get_finfo_layer_name(Map));
623+
G_saprintf(line, "%-17s%s", _("OGR layer:"), finfo_lname);
622624
printline(line);
623625
G_saprintf(line, "%-17s%s", _("OGR datasource:"),
624626
Vect_get_finfo_dsn_name(Map));
625627
printline(line);
626-
G_saprintf(line, "%-17s%s", _("Feature type:"),
627-
Vect_get_finfo_geometry_type(Map));
628+
G_saprintf(line, "%-17s%s", _("Feature type:"), geom_type);
628629
printline(line);
629630
}
630631
else if (map_type == GV_FORMAT_POSTGIS) {
631632
int topo_format;
632-
char *toposchema_name, *topogeom_column;
633+
char *toposchema_name = NULL, *topogeom_column = NULL;
633634
int topo_geo_only;
634635

635636
const struct Format_info *finfo;
636637

637638
finfo = Vect_get_finfo(Map);
638639

639-
G_saprintf(line, "%-17s%s (%s)", _("Map format:"),
640-
Vect_maptype_info(Map), Vect_get_finfo_format_info(Map));
640+
G_saprintf(line, "%-17s%s (%s)", _("Map format:"), maptype_str,
641+
Vect_get_finfo_format_info(Map));
641642
printline(line);
642643

643644
/* for PostGIS format print also datasource and layer */
644-
G_saprintf(line, "%-17s%s", _("DB table:"),
645-
Vect_get_finfo_layer_name(Map));
645+
G_saprintf(line, "%-17s%s", _("DB table:"), finfo_lname);
646646
printline(line);
647647
G_saprintf(line, "%-17s%s", _("DB name:"),
648648
Vect_get_finfo_dsn_name(Map));
@@ -652,8 +652,7 @@ void print_info(struct Map_info *Map)
652652
finfo->pg.geom_column);
653653
printline(line);
654654

655-
G_saprintf(line, "%-17s%s", _("Feature type:"),
656-
Vect_get_finfo_geometry_type(Map));
655+
G_saprintf(line, "%-17s%s", _("Feature type:"), geom_type);
657656
printline(line);
658657

659658
topo_format = Vect_get_finfo_topology_info(
@@ -671,9 +670,11 @@ void print_info(struct Map_info *Map)
671670
"pseudo (simple features)");
672671

673672
printline(line);
673+
G_free(toposchema_name);
674+
G_free(topogeom_column);
674675
}
675676
else {
676-
G_saprintf(line, "%-17s%s", _("Map format:"), Vect_maptype_info(Map));
677+
G_saprintf(line, "%-17s%s", _("Map format:"), maptype_str);
677678
printline(line);
678679
}
679680

@@ -770,6 +771,9 @@ void print_info(struct Map_info *Map)
770771
printline(line);
771772
divider('+');
772773
fprintf(stdout, "\n");
774+
G_free((void *)maptype_str);
775+
G_free(finfo_lname);
776+
G_free((void *)geom_type);
773777
}
774778

775779
/*!

0 commit comments

Comments
 (0)