[system] Don't terminate response reading on bad cookie value. Fixes #18868
authorMarek Safar <marek.safar@gmail.com>
Tue, 22 Apr 2014 12:30:47 +0000 (14:30 +0200)
committerMarek Safar <marek.safar@gmail.com>
Tue, 22 Apr 2014 12:31:19 +0000 (14:31 +0200)
mcs/class/System/System.Net/HttpWebResponse.cs

index 2b756a97bd1e513400a25f64f3484ddc7e40f117..79e61a436249dc4f6653567b75d6080e397f4c72 100644 (file)
@@ -347,22 +347,31 @@ namespace System.Net
                        if (webHeaders == null)
                                return;
 
-                       string value = webHeaders.Get ("Set-Cookie");
-                       if (value != null) {
-                               SetCookie (value);
+                       //
+                       // Don't terminate response reading on bad cookie value
+                       //
+                       string value;
+                       try {
+                               value = webHeaders.Get ("Set-Cookie");
+                               if (value != null && SetCookie (value))
+                                       return;
+                       } catch {
                        }
 
-                       value = webHeaders.Get ("Set-Cookie2");
-                       if (value != null) {
-                               SetCookie (value);
+                       try {
+                               value = webHeaders.Get ("Set-Cookie2");
+                               if (value != null)
+                                       SetCookie (value);
+                       } catch {
                        }
                }
 
-               void SetCookie (string header)
+               bool SetCookie (string header)
                {
                        if (cookieCollection == null)
                                cookieCollection = new CookieCollection ();
 
+                       bool at_least_one_set = false;
                        var parser = new CookieParser (header);
                        foreach (var cookie in parser.Parse ()) {
                                if (cookie.Domain == "") {
@@ -375,9 +384,13 @@ namespace System.Net
                                        continue;
 
                                cookieCollection.Add (cookie);
-                               if (cookie_container != null)
+                               if (cookie_container != null) {
                                        cookie_container.Add (uri, cookie);
+                                       at_least_one_set = true;
+                               }
                        }
+
+                       return at_least_one_set;
                }
        }       
 }