]> sjero.net Git - wget/commitdiff
Fix crash when receiving a HTTP redirect upon a POST request
authorGiuseppe Scrivano <gscrivano@gnu.org>
Thu, 2 May 2013 19:33:08 +0000 (21:33 +0200)
committerGiuseppe Scrivano <gscrivano@gnu.org>
Thu, 2 May 2013 19:57:20 +0000 (21:57 +0200)
The crash was introduced by a recent commit.

src/ChangeLog
src/http.c
src/init.c

index e9572051cd573c6e832cca58ebdf3a5907e74ccb..6a974d8b8a3cc56004c714659620806058a9716d 100644 (file)
@@ -1,3 +1,11 @@
+2013-05-01  Giuseppe Scrivano  <gscrivano@gnu.org>
+
+       * init.c: Declare `cmd_string_uppercase'.
+       (commands): Now `method' uses cmd_string_uppercase.
+       (cmd_string_uppercase): New method
+       * http.c (gethttp): Do not transform opt.method to uppercase.
+       Reported by: Stefano Lattarini <stefano.lattarini@gmail.com>
+
 2013-04-24  Darshit Shah <darnir@gmail.com>
 
        * http.c (gethttp): Remove check for opt.post_data and
index 25ad4740f8c35f2419a77d2e2648550162879ce0..3a33840b6f66ea25f23ab03622da19408189f83f 100644 (file)
@@ -1766,12 +1766,7 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy,
     if (head_only)
       meth = "HEAD";
     else if (opt.method)
-      {
-        char *q;
-        for (q = opt.method; *q; ++q)
-          *q = c_toupper (*q);
-        meth = opt.method;
-      }
+      meth = opt.method;
     /* Use the full path, i.e. one that includes the leading slash and
        the query string.  E.g. if u->path is "foo/bar" and u->query is
        "param=value", full_path will be "/foo/bar?param=value".  */
index 813781fb590257817bed987f92c0415d5e1eaaea..b4336502057a425143a60d318cb49fff52b26cb6 100644 (file)
@@ -87,6 +87,7 @@ CMD_DECLARE (cmd_directory_vector);
 CMD_DECLARE (cmd_number);
 CMD_DECLARE (cmd_number_inf);
 CMD_DECLARE (cmd_string);
+CMD_DECLARE (cmd_string_uppercase);
 CMD_DECLARE (cmd_file);
 CMD_DECLARE (cmd_directory);
 CMD_DECLARE (cmd_time);
@@ -212,7 +213,7 @@ static const struct {
   { "logfile",          &opt.lfilename,         cmd_file },
   { "login",            &opt.ftp_user,          cmd_string },/* deprecated*/
   { "maxredirect",      &opt.max_redirect,      cmd_number },
-  { "method",           &opt.method,            cmd_string },
+  { "method",           &opt.method,            cmd_string_uppercase },
   { "mirror",           NULL,                   cmd_spec_mirror },
   { "netrc",            &opt.netrc,             cmd_boolean },
   { "noclobber",        &opt.noclobber,         cmd_boolean },
@@ -959,8 +960,24 @@ cmd_string (const char *com, const char *val, void *place)
   return true;
 }
 
+/* Like cmd_string but ensure the string is upper case.  */
+static bool
+cmd_string_uppercase (const char *com, const char *val, void *place)
+{
+  char *q;
+  bool ret = cmd_string (com, val, place);
+  q = *((char **) place);
+  if (!ret || q == NULL)
+    return false;
+
+  while (*q)
+    *q++ = c_toupper (*q);
+
+  return true;
+}
+
 
-/* Like the above, but handles tilde-expansion when reading a user's
+/* Like cmd_string, but handles tilde-expansion when reading a user's
    `.wgetrc'.  In that case, and if VAL begins with `~', the tilde
    gets expanded to the user's home directory.  */
 static bool