From f77d0b36654c23ec332ff8ce4030da6465d42067 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Wed, 20 Oct 2021 13:37:39 +0200 Subject: [PATCH] Close translation-file handler --- Source/utils/language.cpp | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/Source/utils/language.cpp b/Source/utils/language.cpp index cba1baa5b..715690e93 100644 --- a/Source/utils/language.cpp +++ b/Source/utils/language.cpp @@ -279,42 +279,57 @@ void LanguageInitialize() // FIXME: Endianness. MoHead head; if (SDL_RWread(rw, &head, sizeof(MoHead), 1) != 1) { + SDL_RWclose(rw); return; } if (head.magic != MO_MAGIC) { + SDL_RWclose(rw); return; // not a MO file } if (head.revision.major > 1 || head.revision.minor > 1) { + SDL_RWclose(rw); return; // unsupported revision } // Read entries of source strings std::unique_ptr src { new MoEntry[head.nbMappings] }; - if (SDL_RWseek(rw, head.srcOffset, RW_SEEK_SET) == -1) + if (SDL_RWseek(rw, head.srcOffset, RW_SEEK_SET) == -1) { + SDL_RWclose(rw); return; + } // FIXME: Endianness. - if (SDL_RWread(rw, src.get(), sizeof(MoEntry), head.nbMappings) != head.nbMappings) + if (SDL_RWread(rw, src.get(), sizeof(MoEntry), head.nbMappings) != head.nbMappings) { + SDL_RWclose(rw); return; + } // Read entries of target strings std::unique_ptr dst { new MoEntry[head.nbMappings] }; - if (SDL_RWseek(rw, head.dstOffset, RW_SEEK_SET) == -1) + if (SDL_RWseek(rw, head.dstOffset, RW_SEEK_SET) == -1) { + SDL_RWclose(rw); return; + } // FIXME: Endianness. - if (SDL_RWread(rw, dst.get(), sizeof(MoEntry), head.nbMappings) != head.nbMappings) + if (SDL_RWread(rw, dst.get(), sizeof(MoEntry), head.nbMappings) != head.nbMappings) { + SDL_RWclose(rw); return; + } std::vector key; std::vector value; // MO header - if (!ReadEntry(rw, &src[0], key) || !ReadEntry(rw, &dst[0], value)) + if (!ReadEntry(rw, &src[0], key) || !ReadEntry(rw, &dst[0], value)) { + SDL_RWclose(rw); return; + } - if (key[0] != '\0') + if (key[0] != '\0') { + SDL_RWclose(rw); return; + } ParseMetadata(value.data()); @@ -337,4 +352,6 @@ void LanguageInitialize() } } } + + SDL_RWclose(rw); }