diff --git a/components/nif/data.cpp b/components/nif/data.cpp index 02e78b599a..3fb38bcec2 100644 --- a/components/nif/data.cpp +++ b/components/nif/data.cpp @@ -470,7 +470,7 @@ namespace Nif void NiStringPalette::read(NIFStream* nif) { - palette = nif->getString(); + palette = nif->getStringPalette(); if (nif->getUInt() != palette.size()) Log(Debug::Warning) << "NIFFile Warning: Failed size check in NiStringPalette. File: " << nif->getFile().getFilename(); diff --git a/components/nif/nifstream.hpp b/components/nif/nifstream.hpp index 39f8ad0a4e..f1e5a980d2 100644 --- a/components/nif/nifstream.hpp +++ b/components/nif/nifstream.hpp @@ -169,6 +169,17 @@ namespace Nif return result; } + /// Read a sequence of null-terminated strings + std::string getStringPalette() + { + size_t size = readLittleEndianType(inp); + std::string str(size, '\0'); + inp->read(str.data(), size); + if (inp->bad()) + throw std::runtime_error("Failed to read string palette of " + std::to_string(size) + " chars"); + return str; + } + void getChars(std::vector& vec, size_t size) { vec.resize(size);