/// <summary>Reads a string encoded in WZ format.</summary> /// <param name="encrypted"> Whether the string is encrypted. </param> /// <returns> The read string. </returns> internal string ReadWZString(bool encrypted = true) { if (Position + 1 > Length) { throw new WZException("WZ string offset out of bounds"); } int length = ReadSByte(); if (length == 0) { return(""); } if (length > 0) { length = length == 127 ? ReadInt32WithinBounds() : length; if (length == 0) { return(""); } if (Position + length * 2 > Length) { throw new WZException("Not enough bytes to read WZ string"); } byte[] rbytes = ReadBytes(length * 2); return(_aes.DecryptUnicodeString(rbytes, encrypted)); } // !(length >= 0), i think we can assume length < 0, but the compiler can't seem to see that length = length == -128 ? ReadInt32WithinBounds() : -length; if (Position + length > Length) { throw new WZException("Not enough bytes to read WZ string"); } return(length == 0 ? "" : _aes.DecryptASCIIString(ReadBytes(length), encrypted)); }