From 73d33aee3235953d91b10ff6e5a571e8c16f5b66 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sun, 13 Dec 2020 18:30:57 +0000 Subject: [PATCH] a few changes to llXorBase64 and llXorBase64StringsCorrect --- .../Shared/Api/Implementation/LSL_Api.cs | 43 ++++++++----------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index e7ff2578f6..f9c9280935 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -11074,7 +11074,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api catch { Error("llBase64ToString", "Error encoding string"); - return String.Empty; + return string.Empty; } } @@ -11089,7 +11089,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api catch { Error("llBase64ToString", "Error decoding string"); - return String.Empty; + return string.Empty; } } @@ -14116,10 +14116,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api str2.TrimEnd(new char[] { '=' }); len = str2.Length; + if(len == 0) + return str1; + int mod = len % 4; if (mod == 1) - str2 = str2.Substring(0, str2.Length - 1); + str2 = str2.Substring(0, len - 1); else if (mod == 2) str2 += "=="; else if (mod == 3) @@ -14135,31 +14138,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api } catch (Exception) { - return new LSL_String(String.Empty); + return string.Empty; } - byte[] d2 = new Byte[data1.Length]; - int pos = 0; + int len2 = data2.Length; + if (len2 == 0) + return str1; - if (data1.Length <= data2.Length) + for (int pos = 0, pos2 = 0; pos < data1.Length; pos++) { - Array.Copy(data2, 0, d2, 0, data1.Length); + data1[pos] ^= data2[pos2]; + if (++pos2 >= len2) + pos2 = 0; } - else - { - while (pos < data1.Length) - { - len = data1.Length - pos; - if (len > data2.Length) - len = data2.Length; - - Array.Copy(data2, 0, d2, pos, len); - pos += len; - } - } - - for (pos = 0 ; pos < data1.Length ; pos++ ) - data1[pos] ^= d2[pos]; return Convert.ToBase64String(data1); } @@ -14231,10 +14222,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return string.Empty; } + int len2 = data2.Length; + if (len2 == 0) + return str1; + for (int pos = 0, pos2 = 0; pos < data1.Length; pos++) { data1[pos] ^= data2[pos2]; - if(++pos2 >= data2.Length) + if (++pos2 >= len2) pos2 = 0; }