From aca3754a17de70453dd51d94b86dea54ae1b221b Mon Sep 17 00:00:00 2001 From: Joseph Da Silva <39675835+jfd16@users.noreply.github.com> Date: Sat, 26 Jun 2021 12:33:01 -0700 Subject: [PATCH] Fix BigInteger hex string parsing bug (#54251) (#54262) --- .../src/System/Numerics/BigNumber.cs | 2 +- .../System.Runtime.Numerics/tests/BigInteger/parse.cs | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Runtime.Numerics/src/System/Numerics/BigNumber.cs b/src/libraries/System.Runtime.Numerics/src/System/Numerics/BigNumber.cs index 957bd73..5ce7919 100644 --- a/src/libraries/System.Runtime.Numerics/src/System/Numerics/BigNumber.cs +++ b/src/libraries/System.Runtime.Numerics/src/System/Numerics/BigNumber.cs @@ -467,8 +467,8 @@ namespace System.Numerics if ((!isNegative && sign < 0) || sign == int.MinValue) { - sign = isNegative ? -1 : 1; bits = new[] { (uint)sign }; + sign = isNegative ? -1 : 1; } } else diff --git a/src/libraries/System.Runtime.Numerics/tests/BigInteger/parse.cs b/src/libraries/System.Runtime.Numerics/tests/BigInteger/parse.cs index 23440b4..115a613 100644 --- a/src/libraries/System.Runtime.Numerics/tests/BigInteger/parse.cs +++ b/src/libraries/System.Runtime.Numerics/tests/BigInteger/parse.cs @@ -105,6 +105,19 @@ namespace System.Numerics.Tests Assert.Equal(0, result); } + [Fact] + public void Parse_Hex32Bits() + { + // Regression test for: https://github.com/dotnet/runtime/issues/54251 + BigInteger result; + + Assert.True(BigInteger.TryParse("80000000", NumberStyles.HexNumber, null, out result)); + Assert.Equal(int.MinValue, result); + + Assert.True(BigInteger.TryParse("080000001", NumberStyles.HexNumber, null, out result)); + Assert.Equal(0x80000001u, result); + } + private static void RunFormatProviderParseStrings() { NumberFormatInfo nfi = new NumberFormatInfo(); -- 2.7.4