From 3ed6d9f9c7903ddfbe3c90ddfae4e4f180a2bb5d Mon Sep 17 00:00:00 2001 From: Benjamin Popp Date: Sun, 2 May 2021 21:43:47 -0500 Subject: [PATCH] Don't crash when writing a ! end token into the anchor editor --- src/HexManiac.Core/Models/Runs/TableStreamRun.cs | 1 + src/HexManiac.Tests/TableTests.cs | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/HexManiac.Core/Models/Runs/TableStreamRun.cs b/src/HexManiac.Core/Models/Runs/TableStreamRun.cs index aa9ed533..51c03335 100644 --- a/src/HexManiac.Core/Models/Runs/TableStreamRun.cs +++ b/src/HexManiac.Core/Models/Runs/TableStreamRun.cs @@ -70,6 +70,7 @@ namespace HavenSoft.HexManiac.Core.Models.Runs { return new FixedLengthStreamStrategy(number); } if (endToken.StartsWith("!") && endToken.Length % 2 == 1 && endToken.Substring(1).All(ViewModels.ViewPort.AllHexCharacters.Contains)) { + if (endToken.Length == 1) return null; // end token must be at least 1 byte long return new EndCodeStreamStrategy(model, endToken.Substring(1).ToUpper()); } var tokens = endToken.Split("/"); diff --git a/src/HexManiac.Tests/TableTests.cs b/src/HexManiac.Tests/TableTests.cs index 1025613c..d4b370c3 100644 --- a/src/HexManiac.Tests/TableTests.cs +++ b/src/HexManiac.Tests/TableTests.cs @@ -746,6 +746,13 @@ namespace HavenSoft.HexManiac.Tests { Assert.Equal("bob|=4+a", segment.SerializeFormat); } + [Fact] + public void CreateTable_BadEndTokenFormat_NoCrash() { + ViewPort.Edit("^table[a:]1 "); + ViewPort.AnchorText = "^table[a:]!"; + Assert.Single(Errors); + } + private void ArrangeTrainerPokemonTeamData(byte structType, byte pokemonCount, int trainerCount) { CreateTextTable(HardcodeTablesModel.PokemonNameTable, 0x180, "ABCDEFGHIJKLMNOP".Select(c => c.ToString()).ToArray()); CreateTextTable(HardcodeTablesModel.MoveNamesTable, 0x1B0, "qrstuvwxyz".Select(c => c.ToString()).ToArray());