Commit 29b5cc18 authored by Marc Gravell's avatar Marc Gravell

Merge pull request #378 from veblush/master

Fix overflow in parsing "-9223372036854775808"
parents 04d3ab0a 675a4531
......@@ -206,17 +206,28 @@ internal static bool TryParseInt64(byte[] value, int offset, int count, out long
result = 0;
if (value == null || count <= 0) return false;
checked
{
bool neg = value[offset] == '-';
{
int max = offset + count;
for (int i = neg ? (offset + 1) : offset; i < max; i++)
if (value[offset] == '-')
{
var b = value[i];
if (b < '0' || b > '9') return false;
result = (result * 10) + (b - '0');
for (int i = offset + 1; i < max; i++)
{
var b = value[i];
if (b < '0' || b > '9') return false;
result = (result * 10) - (b - '0');
}
return true;
}
else
{
for (int i = offset; i < max; i++)
{
var b = value[i];
if (b < '0' || b > '9') return false;
result = (result * 10) + (b - '0');
}
return true;
}
if (neg) result = -result;
return true;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment