]> sjero.net Git - wget/blobdiff - src/headers.c
[svn] Convert URLs in <form action=...>.
[wget] / src / headers.c
index f3a07ab43a8623086431a1ae1af65b63b4052e32..4f65c2b50e88dd06d195238c5c29b3b4d45ce1c7 100644 (file)
@@ -1,20 +1,20 @@
 /* Generic support for headers.
    Copyright (C) 1997, 1998 Free Software Foundation, Inc.
 
-This file is part of Wget.
+This file is part of GNU Wget.
 
-This program is free software; you can redistribute it and/or modify
+GNU Wget is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 
-This program is distributed in the hope that it will be useful,
+GNU Wget is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
+along with Wget; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include <config.h>
@@ -64,8 +64,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
    as much memory as necessary for it to fit.  It need not contain a
    `:', thus you can use it to retrieve, say, HTTP status line.
 
-   The trailing CRLF or LF are stripped from the header, and it is
-   zero-terminated.   #### Is this well-behaved?  */
+   All trailing whitespace is stripped from the header, and it is
+   zero-terminated.  */
 int
 header_get (struct rbuf *rbuf, char **hdr, enum header_get_flags flags)
 {
@@ -101,11 +101,13 @@ header_get (struct rbuf *rbuf, char **hdr, enum header_get_flags flags)
                  if (next == '\t' || next == ' ')
                    continue;
                }
-             /* The header ends.  */
+
+             /* Strip trailing whitespace.  (*hdr)[i] is the newline;
+                decrement I until it points to the last available
+                whitespace.  */
+             while (i > 0 && ISSPACE ((*hdr)[i - 1]))
+               --i;
              (*hdr)[i] = '\0';
-             /* Get rid of '\r'.  */
-             if (i > 0 && (*hdr)[i - 1] == '\r')
-               (*hdr)[i - 1] = '\0';
              break;
            }
        }
@@ -149,6 +151,15 @@ header_extract_number (const char *header, void *closure)
 
   for (result = 0; ISDIGIT (*p); p++)
     result = 10 * result + (*p - '0');
+
+  /* Failure if no number present. */
+  if (p == header)
+    return 0;
+
+  /* Skip trailing whitespace. */
+  p += skip_lws (p);
+
+  /* Indicate failure if trailing garbage is present. */
   if (*p)
     return 0;