Skip to content

Commit

Permalink
Fix mem leak
Browse files Browse the repository at this point in the history
  • Loading branch information
slobodan-ilic committed Sep 22, 2024
1 parent 5fceabb commit c0bb93b
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 23 deletions.
47 changes: 25 additions & 22 deletions src/spss/readstat_sav_parse_mr_name.c
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@

#line 1 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 1 "src/spss/readstat_sav_parse_mr_name.rl"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "../readstat.h"
#include "../readstat_malloc.h"


#line 11 "./src/spss/readstat_sav_parse_mr_name.c"
#line 11 "src/spss/readstat_sav_parse_mr_name.c"
static const char _mr_extractor_actions[] = {
0, 1, 0, 1, 1, 1, 2, 1,
3, 1, 4
Expand Down Expand Up @@ -67,7 +67,7 @@ static const int mr_extractor_start = 1;
static const int mr_extractor_en_main = 1;


#line 75 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 75 "src/spss/readstat_sav_parse_mr_name.rl"


readstat_error_t extract_mr_data(const char *line, mr_set_t *result) {
Expand All @@ -89,14 +89,14 @@ readstat_error_t extract_mr_data(const char *line, mr_set_t *result) {

// Execute Ragel finite state machine (FSM)

#line 93 "./src/spss/readstat_sav_parse_mr_name.c"
#line 93 "src/spss/readstat_sav_parse_mr_name.c"
{
cs = mr_extractor_start;
}

#line 96 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 96 "src/spss/readstat_sav_parse_mr_name.rl"

#line 100 "./src/spss/readstat_sav_parse_mr_name.c"
#line 100 "src/spss/readstat_sav_parse_mr_name.c"
{
int _klen;
unsigned int _trans;
Expand Down Expand Up @@ -171,22 +171,22 @@ readstat_error_t extract_mr_data(const char *line, mr_set_t *result) {
switch ( *_acts++ )
{
case 0:
#line 10 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 10 "src/spss/readstat_sav_parse_mr_name.rl"
{
mr_name = (char *)malloc(p - start + 1);
memcpy(mr_name, start, p - start);
mr_name[p - start] = '\0';
}
break;
case 1:
#line 16 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 16 "src/spss/readstat_sav_parse_mr_name.rl"
{
mr_type = *p;
start = p + 1;
}
break;
case 2:
#line 21 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 21 "src/spss/readstat_sav_parse_mr_name.rl"
{
int n_cv_digs = p - start;
char *n_dig_str = (char *)malloc(n_cv_digs + 1);
Expand All @@ -207,7 +207,7 @@ readstat_error_t extract_mr_data(const char *line, mr_set_t *result) {
}
break;
case 3:
#line 40 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 40 "src/spss/readstat_sav_parse_mr_name.rl"
{
char *lbl_len_str = (char *)malloc(p - start + 1);
memcpy(lbl_len_str, start, p - start);
Expand All @@ -221,7 +221,7 @@ readstat_error_t extract_mr_data(const char *line, mr_set_t *result) {
}
break;
case 4:
#line 52 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 52 "src/spss/readstat_sav_parse_mr_name.rl"
{
int len = p - start;
char *subvar = (char *)malloc(len + 1);
Expand All @@ -233,7 +233,7 @@ readstat_error_t extract_mr_data(const char *line, mr_set_t *result) {
mr_subvariables[mr_subvar_count++] = subvar;
}
break;
#line 237 "./src/spss/readstat_sav_parse_mr_name.c"
#line 237 "src/spss/readstat_sav_parse_mr_name.c"
}
}

Expand All @@ -246,7 +246,7 @@ readstat_error_t extract_mr_data(const char *line, mr_set_t *result) {
_out: {}
}

#line 97 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 97 "src/spss/readstat_sav_parse_mr_name.rl"

// Check if FSM finished successfully
if (cs < 9 || p != pe) {
Expand Down Expand Up @@ -288,7 +288,7 @@ readstat_error_t parse_mr_line(const char *line, mr_set_t *result) {
}


#line 292 "./src/spss/readstat_sav_parse_mr_name.c"
#line 292 "src/spss/readstat_sav_parse_mr_name.c"
static const char _mr_parser_actions[] = {
0, 1, 0
};
Expand Down Expand Up @@ -331,7 +331,7 @@ static const int mr_parser_start = 1;
static const int mr_parser_en_main = 1;


#line 157 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 160 "src/spss/readstat_sav_parse_mr_name.rl"


readstat_error_t parse_mr_string(const char *line, mr_set_t **mr_sets, size_t *n_mr_lines) {
Expand All @@ -344,14 +344,14 @@ readstat_error_t parse_mr_string(const char *line, mr_set_t **mr_sets, size_t *n
*n_mr_lines = 0;


#line 348 "./src/spss/readstat_sav_parse_mr_name.c"
#line 348 "src/spss/readstat_sav_parse_mr_name.c"
{
cs = mr_parser_start;
}

#line 169 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 172 "src/spss/readstat_sav_parse_mr_name.rl"

#line 355 "./src/spss/readstat_sav_parse_mr_name.c"
#line 355 "src/spss/readstat_sav_parse_mr_name.c"
{
int _klen;
unsigned int _trans;
Expand Down Expand Up @@ -426,19 +426,22 @@ readstat_error_t parse_mr_string(const char *line, mr_set_t **mr_sets, size_t *n
switch ( *_acts++ )
{
case 0:
#line 140 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 140 "src/spss/readstat_sav_parse_mr_name.rl"
{
char *mln = (char *)malloc(p - start);
memcpy(mln, start + 1, p - start);
mln[p - start - 1] = '\0';
*mr_sets = realloc(*mr_sets, ((*n_mr_lines) + 1) * sizeof(mr_set_t));
retval = parse_mr_line(mln, &(*mr_sets)[*n_mr_lines]);
if (retval != READSTAT_OK) goto cleanup;
if (retval != READSTAT_OK) {
if (mln == NULL) free(mln);
goto cleanup;
}
(*n_mr_lines)++;
start = p + 1;
}
break;
#line 442 "./src/spss/readstat_sav_parse_mr_name.c"
#line 445 "src/spss/readstat_sav_parse_mr_name.c"
}
}

Expand All @@ -451,7 +454,7 @@ readstat_error_t parse_mr_string(const char *line, mr_set_t **mr_sets, size_t *n
_out: {}
}

#line 170 "./src/spss/readstat_sav_parse_mr_name.rl"
#line 173 "src/spss/readstat_sav_parse_mr_name.rl"

if (cs < 4 || p != pe) {
retval = READSTAT_ERROR_BAD_MR_STRING;
Expand Down
5 changes: 4 additions & 1 deletion src/spss/readstat_sav_parse_mr_name.rl
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,10 @@ readstat_error_t parse_mr_line(const char *line, mr_set_t *result) {
mln[p - start - 1] = '\0';
*mr_sets = realloc(*mr_sets, ((*n_mr_lines) + 1) * sizeof(mr_set_t));
retval = parse_mr_line(mln, &(*mr_sets)[*n_mr_lines]);
if (retval != READSTAT_OK) goto cleanup;
if (retval != READSTAT_OK) {
if (mln == NULL) free(mln);
goto cleanup;
}
(*n_mr_lines)++;
start = p + 1;
}
Expand Down

0 comments on commit c0bb93b

Please sign in to comment.