From 226c1579d760593e245287b520729bdda60c9ff1 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 12 Aug 2021 17:17:34 +0300 Subject: [PATCH] fix parsing error with UTF-16 BOM array index out of bounds on some systems on parsed list String.Trim don't remove BOM on .net 4 --- PasswordChanger1C/MainForm.cs | 2 +- PasswordChanger1C/Parser.cs | 3 ++- Tests/PasswordChanger1C_Tests/AccessFunctions_Tests.cs | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/PasswordChanger1C/MainForm.cs b/PasswordChanger1C/MainForm.cs index 30962c8..e89b0e8 100644 --- a/PasswordChanger1C/MainForm.cs +++ b/PasswordChanger1C/MainForm.cs @@ -131,7 +131,7 @@ public void GetUsers() } var AuthStructure = ParserServices.ParsesClass.ParseString(Row["DATA"].ToString())[0]; - var Hashes = CommonModule.GetPasswordHashTuple(AuthStructure[0]); + var Hashes = CommonModule.GetPasswordHashTuple(AuthStructure); string PassHash = Hashes.Item1; var G = new Guid((byte[])Row["ID"]); Row.Add("UserGuidStr", G.ToString()); diff --git a/PasswordChanger1C/Parser.cs b/PasswordChanger1C/Parser.cs index c7b17a7..5013462 100644 --- a/PasswordChanger1C/Parser.cs +++ b/PasswordChanger1C/Parser.cs @@ -49,7 +49,8 @@ public class ParsesClass { public static ParserList ParseString(string Str) { - var Arr = Str.Split(','); + char[] BomMarkers = { '\uFEFF' }; + var Arr = Str.Trim(BomMarkers).Split(','); int argPosition = 0; var List = ParseStringInternal(Arr, ref argPosition, Arr.Length - 1); return List; diff --git a/Tests/PasswordChanger1C_Tests/AccessFunctions_Tests.cs b/Tests/PasswordChanger1C_Tests/AccessFunctions_Tests.cs index e73d4e0..8e9d860 100644 --- a/Tests/PasswordChanger1C_Tests/AccessFunctions_Tests.cs +++ b/Tests/PasswordChanger1C_Tests/AccessFunctions_Tests.cs @@ -44,7 +44,7 @@ public void ReadInfoBase_TestPasswords(string filename) continue; // skip default user } var AuthStructure = ParserServices.ParsesClass.ParseString(Row["DATA"].ToString())[0]; - var Hashes = CommonModule.GetPasswordHashTuple(AuthStructure[0]); + var Hashes = CommonModule.GetPasswordHashTuple(AuthStructure); string PassHash = Hashes.Item1.Trim('"'); string PassHash2 = Hashes.Item2.Trim('"'); @@ -76,7 +76,7 @@ public void WritePasswordIntoInfoBaseIB_Test(string original_filename) var TableParams = AccessFunctions.ReadInfoBase(tmp_filename, "V8USERS"); var Row = TableParams.Records[1]; var AuthStructure = ParserServices.ParsesClass.ParseString(Row["DATA"].ToString())[0]; - var Hashes = CommonModule.GetPasswordHashTuple(AuthStructure[0]); + var Hashes = CommonModule.GetPasswordHashTuple(AuthStructure); var OldDataBinary = Row["DATA_BINARY"]; string OldData = Row["DATA"].ToString(); @@ -92,7 +92,7 @@ public void WritePasswordIntoInfoBaseIB_Test(string original_filename) var TableParams_New = AccessFunctions.ReadInfoBase(tmp_filename, "V8USERS"); var Row_New = TableParams_New.Records[1]; var AuthStructure_New = ParserServices.ParsesClass.ParseString(Row_New["DATA"].ToString())[0]; - var Hashes_New = CommonModule.GetPasswordHashTuple(AuthStructure_New[0]); + var Hashes_New = CommonModule.GetPasswordHashTuple(AuthStructure_New); string PassHash_New = Hashes_New.Item1.Trim('"'); string PassHash2_New = Hashes_New.Item2.Trim('"');