Fix a couple of bugs in the option string reassembly code.

git-svn-id: svn+ssh://svn.openpam.org/svn/openpam/trunk@483 185d5e19-27fe-0310-9dcf-9bff6b9f3609
This commit is contained in:
Dag-Erling Smørgrav 2011-11-03 16:46:20 +00:00
parent 6835696a2a
commit 493804d19b
1 changed files with 11 additions and 4 deletions

View File

@ -294,6 +294,7 @@ parse_option(char **line)
char *nb, *ne, *vb, *ve;
unsigned char q = 0;
char *option;
size_t size;
errno = 0;
for (nb = *line; *nb && is_lws(*nb); ++nb)
@ -324,12 +325,18 @@ parse_option(char **line)
} else {
vb = ve = ne;
}
if ((option = malloc((ne - nb) + 1 + (ve - vb) + 1)) == NULL)
size = (ne - nb) + 1;
if (ve > vb)
size += (ve - vb) + 1;
if ((option = malloc(size)) == NULL)
return (NULL);
strncpy(option, nb, ne - nb);
option[ne - nb] = '=';
strncpy(option + (ne - nb), vb, ve - vb);
option[(ne - nb) + 1 + (ve - vb) + 1] = '\0';
if (ve > vb) {
option[ne - nb] = '=';
strncpy(option + (ne - nb) + 1, vb, ve - vb);
}
option[size - 1] = '\0';
fprintf(stderr, "%s\n", option);
*line = q ? ve + 1 : ve;
return (option);
}