From 988c3ae893d6fd58b27b9d2fa98fc55d266ea048 Mon Sep 17 00:00:00 2001 From: des Date: Wed, 3 Apr 2013 12:17:35 +0000 Subject: [PATCH] MFH (r247810): correctly parse mixed quoted / unquoted text. git-svn-id: svn://svn.freebsd.org/base/stable/9@249050 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- contrib/openpam/doc/man/openpam_straddch.3 | 21 +++++++++++++++++++-- contrib/openpam/lib/openpam_readline.c | 6 ++---- contrib/openpam/lib/openpam_readword.c | 7 +------ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/contrib/openpam/doc/man/openpam_straddch.3 b/contrib/openpam/doc/man/openpam_straddch.3 index c55582477..ea11c93b5 100644 --- a/contrib/openpam/doc/man/openpam_straddch.3 +++ b/contrib/openpam/doc/man/openpam_straddch.3 @@ -34,7 +34,7 @@ .\" .\" $Id$ .\" -.Dd May 26, 2012 +.Dd March 3, 2013 .Dt OPENPAM_STRADDCH 3 .Os .Sh NAME @@ -73,6 +73,21 @@ and argument point to variables used to hold the size of the buffer and the length of the string it contains, respectively. .Pp +The final argument, +.Fa ch , +is the character that should be appended to +the string. If +.Fa ch +is 0, nothing is appended, but a new buffer is +still allocated if +.Fa str +is NULL. This can be used to +.Do +bootstrap +.Dc +the +string. +.Pp If a new buffer is allocated or an existing buffer is reallocated to make room for the additional character, .Fa str @@ -91,7 +106,9 @@ If the function is successful, it increments the integer variable pointed to by .Fa len -and returns 0. +(unless +.Fa ch +was 0) and returns 0. Otherwise, it leaves the variables pointed to by .Fa str , .Fa size diff --git a/contrib/openpam/lib/openpam_readline.c b/contrib/openpam/lib/openpam_readline.c index 014acfb2c..047ab8369 100644 --- a/contrib/openpam/lib/openpam_readline.c +++ b/contrib/openpam/lib/openpam_readline.c @@ -62,11 +62,9 @@ openpam_readline(FILE *f, int *lineno, size_t *lenp) size_t len, size; int ch; - if ((line = malloc(size = MIN_LINE_LENGTH)) == NULL) { - openpam_log(PAM_LOG_ERROR, "malloc(): %m"); + line = NULL; + if (openpam_straddch(&line, &size, &len, 0) != 0) return (NULL); - } - len = 0; for (;;) { ch = fgetc(f); /* strip comment */ diff --git a/contrib/openpam/lib/openpam_readword.c b/contrib/openpam/lib/openpam_readword.c index 74a4d462c..1c0e9b681 100644 --- a/contrib/openpam/lib/openpam_readword.c +++ b/contrib/openpam/lib/openpam_readword.c @@ -86,13 +86,8 @@ openpam_readword(FILE *f, int *lineno, size_t *lenp) /* begin quote */ quote = ch; /* edge case: empty quoted string */ - if (word == NULL && (word = malloc(1)) == NULL) { - openpam_log(PAM_LOG_ERROR, "malloc(): %m"); - errno = ENOMEM; + if (openpam_straddch(&word, &size, &len, 0) != 0) return (NULL); - } - *word = '\0'; - size = 1; } else if (ch == quote && !escape) { /* end quote */ quote = 0; -- 2.45.0