From f9a4f7c2a3b48de75f0824bf509e90df8feff156 Mon Sep 17 00:00:00 2001 From: alcexhim Date: Sun, 8 Jun 2014 20:40:15 -0400 Subject: [PATCH] Fixed esoteric bug in ReadUntil... still needs optimization --- .../UniversalEditor.Core/IO/Reader.cs | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/CSharp/Libraries/UniversalEditor.Core/IO/Reader.cs b/CSharp/Libraries/UniversalEditor.Core/IO/Reader.cs index 91accfec..2d0a4f39 100644 --- a/CSharp/Libraries/UniversalEditor.Core/IO/Reader.cs +++ b/CSharp/Libraries/UniversalEditor.Core/IO/Reader.cs @@ -771,19 +771,30 @@ namespace UniversalEditor.IO { Array.Resize(ref w, w.Length + 1); w[w.Length - 1] = ReadByte(); - if (mvarAccessor.Remaining >= sequence.Length) + + bool matches = true; + for (int i = 0; i < sequence.Length; i++) + { + if (w.Length < sequence.Length) + { + matches = false; + break; + } + if (w[w.Length - (sequence.Length - i)] != sequence[i]) + { + matches = false; + break; + } + } + + if (matches) { - byte[] seq = ReadBytes(sequence.Length); - if (sequence.Match(seq)) - { - if (!includeSequence) mvarAccessor.Seek((-1 * sequence.Length), SeekOrigin.Current); - return w; - } - mvarAccessor.Seek((-1 * sequence.Length), SeekOrigin.Current); - } - else - { - return null; + if (!includeSequence) + { + Array.Resize(ref w, w.Length - sequence.Length); + Seek(-sequence.Length, SeekOrigin.Current); + } + return w; } } return w; @@ -1441,7 +1452,9 @@ namespace UniversalEditor.IO public string ReadLine() { - return ReadUntil(GetNewLineSequence()); + string line = ReadUntil(GetNewLineSequence()); + byte[] newlineDummy = ReadBytes(GetNewLineSequence().Length); + return line; } public void Seek(int length, SeekOrigin origin)