From 9092c3385a7a21cb1fff1870a45c7ad09d3cc58f Mon Sep 17 00:00:00 2001 From: AJ Date: Mon, 11 Mar 2019 09:10:42 -0400 Subject: [PATCH] Fixed EndOfStreamException thrown when trying to read LensType in older files. --- CincyLib/Laser/MaterialLibReader.cs | 67 ++++++++++++++++------------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/CincyLib/Laser/MaterialLibReader.cs b/CincyLib/Laser/MaterialLibReader.cs index d80d076..0cdc653 100644 --- a/CincyLib/Laser/MaterialLibReader.cs +++ b/CincyLib/Laser/MaterialLibReader.cs @@ -112,6 +112,7 @@ namespace CincyLib.Laser length = length * third + second + third; } + MaterialLib.Notes = Encoding.ASCII.GetString(reader.ReadBytes(length)); reader.BaseStream.Seek(4, SeekOrigin.Current); // Unknown 4 bytes @@ -124,44 +125,48 @@ namespace CincyLib.Laser MaterialLib.PierceFocusNearField = Math.Round(reader.ReadSingle(), 4); MaterialLib.PierceFocusFarField = Math.Round(reader.ReadSingle(), 4); - // older files wont go this far... - const int seek = 18; + long p; - var hasExtendedInfo = reader.BaseStream.Length > reader.BaseStream.Position + seek; + p = reader.BaseStream.Position + 18; - if (hasExtendedInfo) + if (p >= reader.BaseStream.Length) + return; + + reader.BaseStream.Seek(p, SeekOrigin.Begin); + MaterialLib.PierceNozzleStandoffRampTo = Math.Round(reader.ReadSingle(), 4); + + p = reader.BaseStream.Position + 54; + + if (p >= reader.BaseStream.Length) + return; + + reader.BaseStream.Seek(p, SeekOrigin.Begin); + var lensType = reader.ReadByte(); + + switch (lensType) { - reader.BaseStream.Seek(seek, SeekOrigin.Current); - MaterialLib.PierceNozzleStandoffRampTo = Math.Round(reader.ReadSingle(), 4); + case 0: + MaterialLib.Lens = "5\""; + break; - reader.BaseStream.Seek(54, SeekOrigin.Current); - var lensType = reader.ReadByte(); + case 1: + MaterialLib.Lens = "7.5\""; + break; - switch (lensType) - { - case 0: - MaterialLib.Lens = "5\""; - break; + case 2: + MaterialLib.Lens = "10\""; + break; - case 1: - MaterialLib.Lens = "7.5\""; - break; - - case 2: - MaterialLib.Lens = "10\""; - break; - - case 3: - MaterialLib.Lens = "Any"; - break; - } - - reader.BaseStream.Seek(1, SeekOrigin.Current); - MaterialLib.Nozzle = reader.ReadString(); - - reader.BaseStream.Seek(4, SeekOrigin.Current); - MaterialLib.PierceType = (PierceType)reader.ReadByte(); + case 3: + MaterialLib.Lens = "Any"; + break; } + + reader.BaseStream.Seek(1, SeekOrigin.Current); + MaterialLib.Nozzle = reader.ReadString(); + + reader.BaseStream.Seek(4, SeekOrigin.Current); + MaterialLib.PierceType = (PierceType)reader.ReadByte(); } }