From 8871f4d6223013935a45fa2e0ea27011dbc1fa41 Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Fri, 6 Jul 2018 14:51:04 +0200 Subject: [PATCH] Fix CID 1164686 (Use of untrusted scalar value) Signed-off-by: Stefan Weil --- src/ccutil/strngs.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ccutil/strngs.cpp b/src/ccutil/strngs.cpp index 44e365465b..1fd650e074 100644 --- a/src/ccutil/strngs.cpp +++ b/src/ccutil/strngs.cpp @@ -161,13 +161,14 @@ bool STRING::Serialize(TFile* fp) const { // Reads from the given file. Returns false in case of error. // If swap is true, assumes a big/little-endian swap is needed. bool STRING::DeSerialize(bool swap, FILE* fp) { - int32_t len; + uint32_t len; if (fread(&len, sizeof(len), 1, fp) != 1) return false; if (swap) ReverseN(&len, sizeof(len)); + // Arbitrarily limit the number of characters to protect against bad data. + if (len > UINT16_MAX) return false; truncate_at(len); - if (static_cast(fread(GetCStr(), 1, len, fp)) != len) return false; - return true; + return fread(GetCStr(), 1, len, fp) == len; } // Reads from the given file. Returns false in case of error. // If swap is true, assumes a big/little-endian swap is needed.