From: Bill Stoddard Date: Sun, 10 Jun 2001 21:01:57 +0000 (+0000) Subject: Fix look in htdigest. Reimplemented getline to work properly with X-Git-Tag: 2.0.19~87 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9f0a1da97a158638097cf31cf3444645628db122;p=thirdparty%2Fapache%2Fhttpd.git Fix look in htdigest. Reimplemented getline to work properly with APR. Shuld consider adding apr_file_getline() to APR. Should also consider changing apr_file_getc() to return characters rather than apr_status. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89331 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index eceb29969f4..bff9fe24740 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,8 @@ Changes with Apache 2.0.19-dev + *) Fix htdigest. It would go into a loop in getline when adding + a second user. [Bill Stoddard] + *) Win32 platforms now fully support mod_userdir options. [Will Rowe] *) Automatically generate httpd.exp for AIX. diff --git a/support/htdigest.c b/support/htdigest.c index f49e059483f..37c0485ed63 100644 --- a/support/htdigest.c +++ b/support/htdigest.c @@ -122,24 +122,20 @@ static int getline(char *s, int n, apr_file_t *f) { register int i = 0; char ch; + apr_status_t rv; - while (1) { - apr_file_getc(&ch, f); - s[i] = ch; + while (i < (n - 1) && + ((rv = apr_file_getc(&ch, f)) == APR_SUCCESS) && (ch != '\n')) { + s[i++] = ch; + } + if (ch == '\n') + s[i++] = ch; + s[i] = '\0'; - if (s[i] == CR) - apr_file_getc(&ch, f); - s[i] = ch; + if (rv != APR_SUCCESS) + return 1; - if ((s[i] == 0x4) || (s[i] == LF) || (i == (n - 1))) { - s[i] = '\0'; - if (apr_file_eof(f) == APR_EOF) { - return 1; - } - return 0; - } - ++i; - } + return 0; } static void putline(apr_file_t *f, char *l) @@ -148,7 +144,6 @@ static void putline(apr_file_t *f, char *l) for (x = 0; l[x]; x++) apr_file_putc(l[x], f); - apr_file_putc('\n', f); }