Explorar o código

diglib: fix cidx memory leaks

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@54932 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz %!s(int64=12) %!d(string=hai) anos
pai
achega
fa83d6bf5d
Modificáronse 2 ficheiros con 7 adicións e 4 borrados
  1. 1 1
      lib/vector/diglib/cindex.c
  2. 6 3
      lib/vector/diglib/cindex_rw.c

+ 1 - 1
lib/vector/diglib/cindex.c

@@ -48,7 +48,7 @@ void dig_cidx_free(struct Plus_head *Plus)
 
     G_debug(2, "dig_cidx_free()");
     for (i = 0; i < Plus->n_cidx; i++) {
-	ci = &(Plus->cidx[0]);
+	ci = &(Plus->cidx[i]);
 	G_free(ci->cat);
 	ci->cat = NULL;
 	ci->field = ci->n_cats = ci->a_cats = ci->n_types = 0;

+ 6 - 3
lib/vector/diglib/cindex_rw.c

@@ -188,9 +188,11 @@ int dig_read_cidx_head(struct gvfile * fp, struct Plus_head *plus)
 	return (-1);
 
     /* alloc space */
-    plus->a_cidx = plus->n_cidx;
-    plus->cidx =
-	(struct Cat_index *)G_malloc(plus->a_cidx * sizeof(struct Cat_index));
+    if (plus->a_cidx < plus->n_cidx) {
+	plus->a_cidx = plus->n_cidx;
+	plus->cidx =
+	    (struct Cat_index *)G_realloc(plus->cidx, plus->a_cidx * sizeof(struct Cat_index));
+    }
 
     for (i = 0; i < plus->n_cidx; i++) {
 	int t;
@@ -292,6 +294,7 @@ int dig_read_cidx(struct gvfile * fp, struct Plus_head *plus, int head_only)
 
     G_debug(3, "dig_read_cidx()");
 
+    dig_cidx_free(plus);
     dig_cidx_init(plus);
 
     dig_rewind(fp);