Skip to content

Commit

Permalink
v3.2.802 - fix: int.Parse CultureInfo #497
Browse files Browse the repository at this point in the history
  • Loading branch information
2881099 committed Dec 4, 2023
1 parent 90e5ac2 commit 3511ee2
Show file tree
Hide file tree
Showing 12 changed files with 43 additions and 1,288 deletions.
35 changes: 18 additions & 17 deletions src/CSRedisCore/CSRedisClient.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
using Newtonsoft.Json;
using CSRedis.Internal.ObjectPool;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;

namespace CSRedis
{
public partial class CSRedisClient : IDisposable
public partial class CSRedisClient : IDisposable
{
/// <summary>
/// 按 key 规则分区存储
Expand Down Expand Up @@ -136,40 +137,40 @@ internal T DeserializeRedisValueInternal<T>(byte[] value)
else if (valueStr == "0") obj = false;
break;
case "System.Byte":
if (byte.TryParse(valueStr, out var trybyte)) obj = trybyte;
if (byte.TryParse(valueStr, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var trybyte)) obj = trybyte;
break;
case "System.Char":
if (valueStr.Length > 0) obj = valueStr[0];
break;
case "System.Decimal":
if (Decimal.TryParse(valueStr, out var trydec)) obj = trydec;
if (Decimal.TryParse(valueStr, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var trydec)) obj = trydec;
break;
case "System.Double":
if (Double.TryParse(valueStr, out var trydb)) obj = trydb;
if (Double.TryParse(valueStr, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var trydb)) obj = trydb;
break;
case "System.Single":
if (Single.TryParse(valueStr, out var trysg)) obj = trysg;
if (Single.TryParse(valueStr, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var trysg)) obj = trysg;
break;
case "System.Int32":
if (Int32.TryParse(valueStr, out var tryint32)) obj = tryint32;
if (Int32.TryParse(valueStr, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var tryint32)) obj = tryint32;
break;
case "System.Int64":
if (Int64.TryParse(valueStr, out var tryint64)) obj = tryint64;
if (Int64.TryParse(valueStr, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var tryint64)) obj = tryint64;
break;
case "System.SByte":
if (SByte.TryParse(valueStr, out var trysb)) obj = trysb;
if (SByte.TryParse(valueStr, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var trysb)) obj = trysb;
break;
case "System.Int16":
if (Int16.TryParse(valueStr, out var tryint16)) obj = tryint16;
if (Int16.TryParse(valueStr, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var tryint16)) obj = tryint16;
break;
case "System.UInt32":
if (UInt32.TryParse(valueStr, out var tryuint32)) obj = tryuint32;
if (UInt32.TryParse(valueStr, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var tryuint32)) obj = tryuint32;
break;
case "System.UInt64":
if (UInt64.TryParse(valueStr, out var tryuint64)) obj = tryuint64;
if (UInt64.TryParse(valueStr, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var tryuint64)) obj = tryuint64;
break;
case "System.UInt16":
if (UInt16.TryParse(valueStr, out var tryuint16)) obj = tryuint16;
if (UInt16.TryParse(valueStr, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var tryuint16)) obj = tryuint16;
break;
case "System.DateTime":
if (DateTime.TryParse(valueStr, out var trydt)) obj = trydt;
Expand All @@ -178,7 +179,7 @@ internal T DeserializeRedisValueInternal<T>(byte[] value)
if (DateTimeOffset.TryParse(valueStr, out var trydtos)) obj = trydtos;
break;
case "System.TimeSpan":
if (Int64.TryParse(valueStr, out tryint64)) obj = new TimeSpan(tryint64);
if (Int64.TryParse(valueStr, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out tryint64)) obj = new TimeSpan(tryint64);
break;
case "System.Guid":
if (Guid.TryParse(valueStr, out var tryguid)) obj = tryguid;
Expand Down Expand Up @@ -3648,7 +3649,7 @@ public bool Rename(string key, string newKey)
if (rule1 != rule2)
{
var ret = StartPipe(a => a.Dump(key).Del(key));
int.TryParse(ret[1]?.ToString(), out var tryint);
int.TryParse(ret[1]?.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var tryint);
if (ret[0] == null || tryint <= 0) return false;
return Restore(newKey, (byte[])ret[0]);
}
Expand Down
6 changes: 3 additions & 3 deletions src/CSRedisCore/CSRedisClientAsync.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;

#if net40
#else
namespace CSRedis
{
public partial class CSRedisClient
public partial class CSRedisClient
{

ConcurrentDictionary<string, AutoPipe> _autoPipe = new ConcurrentDictionary<string, AutoPipe>();
Expand Down Expand Up @@ -2421,7 +2421,7 @@ async public Task<bool> RenameAsync(string key, string newKey)
if (rule1 != rule2)
{
var ret = StartPipe(a => a.Dump(key).Del(key));
int.TryParse(ret[1]?.ToString(), out var tryint);
int.TryParse(ret[1]?.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var tryint);
if (ret[0] == null || tryint <= 0) return false;
return await RestoreAsync(newKey, (byte[])ret[0]);
}
Expand Down
2 changes: 1 addition & 1 deletion src/CSRedisCore/CSRedisCore.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<AssemblyName>CSRedisCore</AssemblyName>
<PackageId>CSRedisCore</PackageId>
<RootNamespace>CSRedisCore</RootNamespace>
<Version>3.8.801</Version>
<Version>3.8.802</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageProjectUrl>https://github.com/2881099/csredis</PackageProjectUrl>
<Description>CSRedis 是 redis.io 官方推荐库,支持 redis-trib集群、哨兵、私有分区与连接池管理技术,简易 RedisHelper 静态类。</Description>
Expand Down
5 changes: 3 additions & 2 deletions src/CSRedisCore/Internal/Commands/RedisDate.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using CSRedis.Internal.IO;
using System;
using System.Globalization;
using System.IO;

namespace CSRedis.Internal.Commands
Expand Down Expand Up @@ -28,8 +29,8 @@ public override DateTime Parse(RedisReader reader)
reader.ExpectType(RedisMessage.MultiBulk);
reader.ExpectSize(2);

var timestamp = Int32.Parse(reader.ReadBulkString());
var microseconds = long.Parse(reader.ReadBulkString());
var timestamp = Int32.Parse(reader.ReadBulkString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat);
var microseconds = long.Parse(reader.ReadBulkString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat);

return FromTimestamp(timestamp, microseconds);
}
Expand Down
2 changes: 1 addition & 1 deletion src/CSRedisCore/Internal/Commands/RedisFloat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public override decimal Parse(RedisReader reader)

static decimal FromString(string input)
{
return decimal.Parse(input, NumberStyles.Any);
return decimal.Parse(input, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat);
}

public class Nullable : RedisCommand<decimal?>
Expand Down
10 changes: 3 additions & 7 deletions src/CSRedisCore/Internal/Commands/RedisRoleCommand.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@

using CSRedis.Internal.IO;
using CSRedis.Internal.Utilities;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.IO;
namespace CSRedis.Internal.Commands
{
class RedisRoleCommand : RedisCommand<RedisRole>
class RedisRoleCommand : RedisCommand<RedisRole>
{
public RedisRoleCommand(string command, params object[] args)
: base(command, args)
Expand Down Expand Up @@ -44,8 +40,8 @@ static RedisMasterRole ParseMaster(int num, string role, RedisReader reader)
reader.ExpectType(RedisMessage.MultiBulk);
reader.ExpectSize(3);
string ip = reader.ReadBulkString();
int port = Int32.Parse(reader.ReadBulkString());
long.TryParse(reader.ReadBulkString(), out var slave_offset);
int port = Int32.Parse(reader.ReadBulkString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat);
long.TryParse(reader.ReadBulkString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var slave_offset);
slaves[i] = new Tuple<string, int, long>(ip, port, slave_offset);
}
return new RedisMasterRole(role, offset, slaves);
Expand Down
9 changes: 3 additions & 6 deletions src/CSRedisCore/Internal/Commands/RedisScanCommand.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
using CSRedis.Internal.IO;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Globalization;

namespace CSRedis.Internal.Commands
{
class RedisScanCommand<T> : RedisCommand<RedisScan<T>>
class RedisScanCommand<T> : RedisCommand<RedisScan<T>>
{
RedisCommand<T[]> _command;

Expand All @@ -23,7 +20,7 @@ public override RedisScan<T> Parse(RedisReader reader)
if (reader.ReadInt(false) != 2)
throw new RedisProtocolException("Expected 2 items");

long cursor = Int64.Parse(reader.ReadBulkString());
long cursor = Int64.Parse(reader.ReadBulkString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat);
T[] items = _command.Parse(reader);

return new RedisScan<T>(cursor, items);
Expand Down
10 changes: 3 additions & 7 deletions src/CSRedisCore/Internal/Commands/RedisStreamCommand.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
using CSRedis.Internal.IO;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Globalization;

namespace CSRedis.Internal.Commands
{
class RedisXRangeCommand : RedisCommand<(string id, string[] items)[]>
class RedisXRangeCommand : RedisCommand<(string id, string[] items)[]>
{
public RedisXRangeCommand(string command, params object[] args)
: base(command, args)
Expand Down Expand Up @@ -131,7 +127,7 @@ public override (long count, string minId, string maxId, (string consumer, long
var lvl3Count = reader.ReadInt(false);
if (lvl3Count != 2) throw new RedisProtocolException("XPedding 返回数据格式 3级 MultiBulk 长度应该为 2");

pendings[a] = (reader.ReadBulkString(), long.Parse(reader.ReadBulkString()));
pendings[a] = (reader.ReadBulkString(), long.Parse(reader.ReadBulkString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat));
}

return (retCount, minId, maxId, pendings);
Expand Down
5 changes: 3 additions & 2 deletions src/CSRedisCore/Internal/Commands/RedisString.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
using CSRedis.Internal.IO;
using System;
using System.ComponentModel;
using System.Globalization;

namespace CSRedis.Internal.Commands
{
class RedisString : RedisCommand<string>
class RedisString : RedisCommand<string>
{
public RedisString(string command, params object[] args)
: base(command, args)
Expand Down Expand Up @@ -39,7 +40,7 @@ public Integer(string command, params object[] args)

public override int Parse(RedisReader reader)
{
return Int32.Parse(reader.ReadBulkString());
return Int32.Parse(reader.ReadBulkString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat);
}
}

Expand Down
6 changes: 3 additions & 3 deletions src/CSRedisCore/Internal/IO/RedisReader.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
using System;
using System.Globalization;
using System.IO;
using System.Net.Sockets;
using System.Text;

namespace CSRedis.Internal.IO
{
internal partial class RedisReader
internal partial class RedisReader
{
readonly RedisIO _io;

Expand Down Expand Up @@ -36,7 +36,7 @@ public long ReadInt(bool checkType = true)
ExpectType(RedisMessage.Int);

string line = ReadLine();
return Int64.Parse(line.ToString());
return Int64.Parse(line.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat);
}

public object ReadBulk(bool checkType = true, bool asString = false)
Expand Down
7 changes: 2 additions & 5 deletions src/CSRedisCore/Internal/RedisCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,11 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;

namespace CSRedis
{
static class RedisCommands
static class RedisCommands
{
#region Connection
public static RedisStatus Auth(string user, string password)
Expand Down Expand Up @@ -1938,7 +1935,7 @@ public override (long k, long width, long depth, decimal decay) Parse(RedisReade
depth = reader.ReadInt();
break;
case "decay":
decay = decimal.Parse(reader.ReadBulkString(), NumberStyles.Any);
decay = decimal.Parse(reader.ReadBulkString(), NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat);
break;
default:
reader.ReadBulkString();
Expand Down
Loading

0 comments on commit 3511ee2

Please sign in to comment.