[system.net.http] Parse range values using long range. Fixes #26109
authorMarek Safar <marek.safar@gmail.com>
Thu, 26 Mar 2015 22:45:15 +0000 (23:45 +0100)
committerMarek Safar <marek.safar@gmail.com>
Thu, 26 Mar 2015 22:46:31 +0000 (23:46 +0100)
mcs/class/System.Net.Http/System.Net.Http.Headers/ContentRangeHeaderValue.cs
mcs/class/System.Net.Http/System.Net.Http.Headers/Lexer.cs
mcs/class/System.Net.Http/System.Net.Http.Headers/RangeHeaderValue.cs
mcs/class/System.Net.Http/Test/System.Net.Http.Headers/ContentRangeHeaderValueTest.cs
mcs/class/System.Net.Http/Test/System.Net.Http.Headers/RangeHeaderValueTest.cs

index 1bea52b76e82fb614d4741e9a5ad355336db0c25..ee2dbe74b67855bf0c9bf4a7210aea2df3b02c46 100644 (file)
@@ -191,10 +191,11 @@ namespace System.Net.Http.Headers
                        t = lexer.Scan ();
 
                        if (!lexer.IsStarStringValue (t)) {
-                               if (!lexer.TryGetNumericValue (t, out nvalue))
+                               long lvalue;
+                               if (!lexer.TryGetNumericValue (t, out lvalue))
                                        return false;
 
-                               value.Length = nvalue;
+                               value.Length = lvalue;
                        }
 
                        t = lexer.Scan ();
index 79dbb8dd321ba9de2023524e66c84d8ff6d990f1..694bf6e56e6a1c22219502ef5c5376ce23a88a5c 100644 (file)
@@ -153,6 +153,11 @@ namespace System.Net.Http.Headers
                        return int.TryParse (GetStringValue (token), NumberStyles.None, CultureInfo.InvariantCulture, out value);
                }
 
+               public bool TryGetNumericValue (Token token, out long value)
+               {
+                       return long.TryParse (GetStringValue (token), NumberStyles.None, CultureInfo.InvariantCulture, out value);
+               }
+
                public TimeSpan? TryGetTimeSpanValue (Token token)
                {
                        int seconds;
index 36e9c806157d4d04a918fde2f39af27a421a37af..17790fbe7920dc9e9762354d21abdced065cfb29 100644 (file)
@@ -123,8 +123,8 @@ namespace System.Net.Http.Headers
 
                        bool token_read;
                        do {
-                               int? from = null, to = null;
-                               int number;
+                               long? from = null, to = null;
+                               long number;
                                token_read = false;
 
                                t = lexer.Scan (recognizeDash: true);
@@ -139,7 +139,7 @@ namespace System.Net.Http.Headers
                                case Token.Type.Token:
                                        string s = lexer.GetStringValue (t);
                                        var values = s.Split (new [] { '-' }, StringSplitOptions.RemoveEmptyEntries);
-                                       if (!int.TryParse (values[0], out number))
+                                       if (!Parser.Long.TryParse (values[0], out number))
                                                return false;
 
                                        switch (values.Length) {
@@ -178,7 +178,7 @@ namespace System.Net.Http.Headers
                                        case 2:
                                                from = number;
 
-                                               if (!int.TryParse (values[1], out number))
+                                               if (!Parser.Long.TryParse (values[1], out number))
                                                        return false;
 
                                                to = number;
index 9e5b7a239231de9b0fc814e8e10c17774a02cda7..62b740c33cd5b9ba2ee05a5ab7741938037be95a 100644 (file)
@@ -84,11 +84,11 @@ namespace MonoTests.System.Net.Http.Headers
                [Test]
                public void Parse ()
                {
-                       var res = ContentRangeHeaderValue.Parse ("bytes  0 - 499/ 1234");
+                       var res = ContentRangeHeaderValue.Parse ("bytes  0 - 499/ 9223372036854775807");
                        Assert.AreEqual (0, res.From, "#1");
                        Assert.AreEqual (499, res.To, "#2");
-                       Assert.AreEqual (1234, res.Length, "#3");
-                       Assert.AreEqual ("bytes 0-499/1234", res.ToString (), "#4");
+                       Assert.AreEqual (9223372036854775807, res.Length, "#3");
+                       Assert.AreEqual ("bytes 0-499/9223372036854775807", res.ToString (), "#4");
 
                        res = ContentRangeHeaderValue.Parse ("bytes  */ 8");
                        Assert.IsNull (res.From, "#11");
index 2dc0c08ca6f9859faabb7b23242db1af7dd1fe82..e52783a94f82ca860344974f63a3b25097684783 100644 (file)
@@ -116,6 +116,12 @@ namespace MonoTests.System.Net.Http.Headers
                        Assert.IsNull (res.Ranges.Skip (1).First ().From, "#53");
                        Assert.AreEqual (9, res.Ranges.Skip (1).First ().To, "#54");
                        Assert.AreEqual ("bytes=0-, -9", res.ToString (), "#55");
+
+                       res = RangeHeaderValue.Parse ("bytes=3637717541-9223372036854775807");
+                       Assert.AreEqual ("bytes", res.Unit, "#60");
+                       Assert.AreEqual (3637717541, res.Ranges.First ().From, "#61");
+                       Assert.AreEqual (9223372036854775807, res.Ranges.First ().To, "#62");
+                       Assert.AreEqual ("bytes=3637717541-9223372036854775807", res.ToString (), "#63");
                }
 
                [Test]