Free memory on error
authorAlan T. DeKok <aland@freeradius.org>
Sat, 2 Mar 2013 15:26:25 +0000 (10:26 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Sat, 2 Mar 2013 15:26:25 +0000 (10:26 -0500)
src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c

index f327183..eacb850 100644 (file)
@@ -198,10 +198,12 @@ static int sql_fetch_row(rlm_sql_handle_t * handle, rlm_sql_config_t *config)
 
        c = sql_num_fields(handle, config);
        retval = (rlm_sql_row_t)rad_malloc(c*sizeof(char*)+1);
+       memset(retval, 0, c*sizeof(char*)+1);
+
        /* advance cursor */
        if(SQLFetch(sock->stmt) == SQL_NO_DATA_FOUND) {
                handle->row = NULL;
-               return 0;
+               goto error;
        }
 
        for(i = 0; i < c; i++) {
@@ -219,6 +221,13 @@ static int sql_fetch_row(rlm_sql_handle_t * handle, rlm_sql_config_t *config)
 
        handle->row = retval;
        return 0;
+
+error:
+       for(i = 0; i < c; i++) {
+               free(retval[i]);
+       }
+       free(retval);
+       return -1;
 }
 
 /*************************************************************************