Fixed wrong count to release temporary memory
authorChristophe CURIS <christophe.curis@free.fr>
Thu, 15 Nov 2012 00:30:33 +0000 (15 01:30 +0100)
committerCarlos R. Mafra <crmafra@gmail.com>
Thu, 15 Nov 2012 12:38:25 +0000 (15 12:38 +0000)
As found by Rodolfo, it looks like there could be memory leak in the
function 'RSmoothScaleImage' because it reserveda given number of
memory blocs but used another count to free them after use.

This patch uses the same count for release as it seems this variable
is not modified in between. Took the opportunity as Rodolfo proposed
to convert a global variable to a local variable - this global
definition seems incorrect.

wrlib/scale.c

index 82ed57e..c5b5caf 100644 (file)
@@ -278,14 +278,13 @@ typedef struct {
        CONTRIB *p;             /* pointer to list of contributions */
 } CLIST;
 
-CLIST *contrib;                        /* array of contribution lists */
-
 /* clamp the input to the specified range */
 #define CLAMP(v,l,h)    ((v)<(l) ? (l) : (v) > (h) ? (h) : v)
 
 /* return of calloc is not checked if NULL in the function below! */
 RImage *RSmoothScaleImage(RImage * src, unsigned new_width, unsigned new_height)
 {
+       CLIST *contrib;                 /* array of contribution lists */
        RImage *tmp;            /* intermediate image */
        double xscale, yscale;  /* zoom scale factors */
        int i, j, k;            /* loop variables */
@@ -381,7 +380,7 @@ RImage *RSmoothScaleImage(RImage * src, unsigned new_width, unsigned new_height)
        }
 
        /* free the memory allocated for horizontal filter weights */
-       for (i = 0; i < tmp->width; ++i) {
+       for (i = 0; i < new_width; ++i) {
                free(contrib[i].p);
        }
        free(contrib);