Browse Source

a few changes to llXorBase64 and llXorBase64StringsCorrect

UbitUmarov 3 years ago
parent
commit
73d33aee32
1 changed files with 19 additions and 24 deletions
  1. 19 24
      OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs

+ 19 - 24
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,32 +14138,20 @@ 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)
-            {
-                Array.Copy(data2, 0, d2, 0, data1.Length);
-            }
-            else
+            for (int pos = 0, pos2 = 0; pos < data1.Length; pos++)
             {
-                while (pos < data1.Length)
-                {
-                    len = data1.Length - pos;
-                    if (len > data2.Length)
-                        len = data2.Length;
-
-                    Array.Copy(data2, 0, d2, pos, len);
-                    pos += len;
-                }
+                data1[pos] ^= data2[pos2];
+                if (++pos2 >= len2)
+                    pos2 = 0;
             }
 
-            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;
             }