Commit 487a599b authored by Cedric Roux's avatar Cedric Roux

bugfix: fix memory error

Using valgrind revealed that those two arrays
were too small. Let's use 512 bytes, which should
be enough for every practical cases.
parent 2a82e02a
...@@ -141,25 +141,16 @@ char defbool[2]="1"; ...@@ -141,25 +141,16 @@ char defbool[2]="1";
int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix) int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix)
{ {
int c = config_get_if()->argc;
int i,j;
int c = config_get_if()->argc; char *pp;
int i,j; char cfgpath[512]; /* 512 should be enough for the sprintf below */
char *pp;
char *cfgpath;
j = (prefix ==NULL) ? 0 : strlen(prefix);
cfgpath = malloc( j + MAX_OPTNAME_SIZE +1);
if (cfgpath == NULL) {
fprintf(stderr,"[CONFIG] %s %i malloc error, %s\n", __FILE__, __LINE__,strerror(errno));
return -1;
}
j = 0; j = 0;
i = 0; i = 0;
while (c > 0 ) { while (c > 0 ) {
char *oneargv = strdup(config_get_if()->argv[i]); /* we use strtok_r which modifies its string paramater, and we don't want argv to be modified */ char *oneargv = strdup(config_get_if()->argv[i]); /* we use strtok_r which modifies its string paramater, and we don't want argv to be modified */
/* first check help options, either --help, -h or --help_<section> */ /* first check help options, either --help, -h or --help_<section> */
if (strncmp(oneargv, "-h",2) == 0 || strncmp(oneargv, "--help",6) == 0 ) { if (strncmp(oneargv, "-h",2) == 0 || strncmp(oneargv, "--help",6) == 0 ) {
char *tokctx; char *tokctx;
pp=strtok_r(oneargv, "_",&tokctx); pp=strtok_r(oneargv, "_",&tokctx);
...@@ -182,7 +173,7 @@ char *cfgpath; ...@@ -182,7 +173,7 @@ char *cfgpath;
} }
} }
/* now, check for non help options */ /* now, check for non help options */
if (oneargv[0] == '-') { if (oneargv[0] == '-') {
for(int n=0;n<numoptions;n++) { for(int n=0;n<numoptions;n++) {
if ( ( cfgoptions[n].paramflags & PARAMFLAG_DISABLECMDLINE) != 0) { if ( ( cfgoptions[n].paramflags & PARAMFLAG_DISABLECMDLINE) != 0) {
...@@ -223,9 +214,5 @@ char *cfgpath; ...@@ -223,9 +214,5 @@ char *cfgpath;
c--; c--;
} /* fin du while */ } /* fin du while */
printf_cmdl("[CONFIG] %s %i options set from command line\n",((prefix == NULL) ? "(root)":prefix),j); printf_cmdl("[CONFIG] %s %i options set from command line\n",((prefix == NULL) ? "(root)":prefix),j);
free(cfgpath);
return j; return j;
} /* parse_cmdline*/ } /* parse_cmdline*/
...@@ -91,8 +91,6 @@ int read_intarray(paramdef_t *cfgoptions,config_setting_t *setting, char *cfgpat ...@@ -91,8 +91,6 @@ int read_intarray(paramdef_t *cfgoptions,config_setting_t *setting, char *cfgpat
int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix )
{ {
config_setting_t *setting; config_setting_t *setting;
char *str; char *str;
int i,u; int i,u;
...@@ -103,15 +101,9 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) ...@@ -103,15 +101,9 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix )
int notfound; int notfound;
int defval; int defval;
int fatalerror=0; int fatalerror=0;
char *cfgpath; /* listname.[listindex].paramname */
int numdefvals=0; int numdefvals=0;
char cfgpath[512]; /* 512 should be enough for the sprintf below */
i = (prefix ==NULL) ? 0 : strlen(prefix);
cfgpath = malloc( i+ MAX_OPTNAME_SIZE +1);
if (cfgpath == NULL) {
fprintf(stderr,"[LIBCONFIG] %s %i malloc error, %s\n", __FILE__, __LINE__,strerror(errno));
return -1;
}
for(i=0;i<numoptions;i++) { for(i=0;i<numoptions;i++) {
if (prefix != NULL) { if (prefix != NULL) {
...@@ -253,7 +245,6 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) ...@@ -253,7 +245,6 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix )
config_libconfig_end(); config_libconfig_end();
end_configmodule(); end_configmodule();
} }
free(cfgpath);
return status; return status;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment