X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/a8facdc09070ba9d01f67de1b08e2704ca34c440..aef68d7892580f4d554281a69cce4d7b6bad0359:/popt/poptparse.c diff --git a/popt/poptparse.c b/popt/poptparse.c index 7bc3a963..e003a04a 100644 --- a/popt/poptparse.c +++ b/popt/poptparse.c @@ -163,8 +163,10 @@ int poptConfigFileToString(FILE *fp, char ** argstrp, /*@unused@*/ UNUSED(int fl p++; linelen = strlen(p); - if (linelen >= maxlinelen-1) + if (linelen >= maxlinelen-1) { + free(argstr); return POPT_ERROR_OVERFLOW; /* XXX line too long */ + } if (*p == '\0' || *p == '\n') continue; /* line is empty */ if (*p == '#') continue; /* comment line */ @@ -188,8 +190,8 @@ int poptConfigFileToString(FILE *fp, char ** argstrp, /*@unused@*/ UNUSED(int fl argstr = realloc(argstr, maxargvlen); if (argstr == NULL) return POPT_ERROR_MALLOC; } - strcat(argstr, " --"); - strcat(argstr, p); + strlcat(argstr, " --", maxargvlen); + strlcat(argstr, p, maxargvlen); continue; } if (*q != '=') @@ -217,11 +219,11 @@ int poptConfigFileToString(FILE *fp, char ** argstrp, /*@unused@*/ UNUSED(int fl argstr = realloc(argstr, maxargvlen); if (argstr == NULL) return POPT_ERROR_MALLOC; } - strcat(argstr, " --"); - strcat(argstr, p); - strcat(argstr, "=\""); - strcat(argstr, q); - strcat(argstr, "\""); + strlcat(argstr, " --", maxargvlen); + strlcat(argstr, p, maxargvlen); + strlcat(argstr, "=\"", maxargvlen); + strlcat(argstr, q, maxargvlen); + strlcat(argstr, "\"", maxargvlen); } *argstrp = argstr;