From 92e25a9377713610a8cea2ba999dac5cc988687f Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 18 Feb 2023 02:34:30 +0000 Subject: [PATCH] change lsl integer parsing --- .../Region/ScriptEngine/Shared/LSL_Types.cs | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index a53264fe30..fde13e0fe9 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs @@ -2175,14 +2175,11 @@ namespace OpenSim.Region.ScriptEngine.Shared value = (int)d; } - public LSLInteger(string s) + public LSLInteger(string s) : this(MemoryExtensions.AsSpan(s)) { } + public LSLInteger(LSLString s) : this(MemoryExtensions.AsSpan(s.m_string)) { } + public LSLInteger(ReadOnlySpan s) { - Match m = castRegex.Match(s); - string v = m.Groups[0].Value; - // Leading plus sign is allowed, but ignored - v = v.Replace("+", ""); - - if (v.Length == 0) + if (s.Length == 0) { value = 0; } @@ -2190,19 +2187,20 @@ namespace OpenSim.Region.ScriptEngine.Shared { try { - if (v.Contains('x') || v.Contains('X')) - { - value = int.Parse(v[2..], System.Globalization.NumberStyles.HexNumber); - } + s = s.TrimStart(); + if (s.StartsWith("0x", StringComparison.OrdinalIgnoreCase)) + value = int.Parse(s[2..], NumberStyles.HexNumber); else - { - value = int.Parse(v, System.Globalization.NumberStyles.Integer); - } + value = int.Parse(s,NumberStyles.Integer); } catch (OverflowException) { value = -1; } + catch + { + value = 0; + } } }