From 1eb35015c3c56a7519a3a6b2f8465fb4c7af770e Mon Sep 17 00:00:00 2001 From: VaDiM Date: Mon, 16 Mar 2026 09:35:05 +0300 Subject: [PATCH] Fix for EndianBinaryReader --- AssetStudio/EndianBinaryReader.cs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/AssetStudio/EndianBinaryReader.cs b/AssetStudio/EndianBinaryReader.cs index d66c32c..63e761b 100644 --- a/AssetStudio/EndianBinaryReader.cs +++ b/AssetStudio/EndianBinaryReader.cs @@ -1,6 +1,7 @@ using System; using System.Buffers.Binary; using System.IO; +using System.Runtime.CompilerServices; namespace AssetStudio { @@ -10,6 +11,14 @@ namespace AssetStudio public EndianType Endian; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ReadToBuff(byte[] buff, int index, int count) + { + var read = Read(buff, index, count); + if (read == 0) + throw new EndOfStreamException(); + } + public EndianBinaryReader(Stream stream, EndianType endian = EndianType.BigEndian) : base(stream) { Endian = endian; @@ -26,7 +35,7 @@ namespace AssetStudio { if (Endian == EndianType.BigEndian) { - Read(buffer, 0, 2); + ReadToBuff(buffer, 0, 2); return BinaryPrimitives.ReadInt16BigEndian(buffer); } return base.ReadInt16(); @@ -36,7 +45,7 @@ namespace AssetStudio { if (Endian == EndianType.BigEndian) { - Read(buffer, 0, 4); + ReadToBuff(buffer, 0, 4); return BinaryPrimitives.ReadInt32BigEndian(buffer); } return base.ReadInt32(); @@ -46,7 +55,7 @@ namespace AssetStudio { if (Endian == EndianType.BigEndian) { - Read(buffer, 0, 8); + ReadToBuff(buffer, 0, 8); return BinaryPrimitives.ReadInt64BigEndian(buffer); } return base.ReadInt64(); @@ -56,7 +65,7 @@ namespace AssetStudio { if (Endian == EndianType.BigEndian) { - Read(buffer, 0, 2); + ReadToBuff(buffer, 0, 2); return BinaryPrimitives.ReadUInt16BigEndian(buffer); } return base.ReadUInt16(); @@ -66,7 +75,7 @@ namespace AssetStudio { if (Endian == EndianType.BigEndian) { - Read(buffer, 0, 4); + ReadToBuff(buffer, 0, 4); return BinaryPrimitives.ReadUInt32BigEndian(buffer); } return base.ReadUInt32(); @@ -76,7 +85,7 @@ namespace AssetStudio { if (Endian == EndianType.BigEndian) { - Read(buffer, 0, 8); + ReadToBuff(buffer, 0, 8); return BinaryPrimitives.ReadUInt64BigEndian(buffer); } return base.ReadUInt64(); @@ -87,7 +96,7 @@ namespace AssetStudio { if (Endian == EndianType.BigEndian) { - Read(buffer, 0, 4); + ReadToBuff(buffer, 0, 4); buffer.AsSpan(0, 4).Reverse(); return BitConverter.ToSingle(buffer, 0); } @@ -98,7 +107,7 @@ namespace AssetStudio { if (Endian == EndianType.BigEndian) { - Read(buffer, 0, 8); + ReadToBuff(buffer, 0, 8); buffer.AsSpan().Reverse(); return BitConverter.ToDouble(buffer, 0); } @@ -109,7 +118,7 @@ namespace AssetStudio { if (Endian == EndianType.BigEndian) { - Read(buffer, 0, 4); + ReadToBuff(buffer, 0, 4); return BinaryPrimitives.ReadSingleBigEndian(buffer); } return base.ReadSingle(); @@ -119,7 +128,7 @@ namespace AssetStudio { if (Endian == EndianType.BigEndian) { - Read(buffer, 0, 8); + ReadToBuff(buffer, 0, 8); return BinaryPrimitives.ReadDoubleBigEndian(buffer); } return base.ReadDouble();