From fa15b9a2afd196b039acc8cf7a90ed7ed9a8ec32 Mon Sep 17 00:00:00 2001 From: mmaciola <71131832+mmaciola@users.noreply.github.com> Date: Mon, 14 Jun 2021 07:18:10 +0200 Subject: [PATCH] tvg_loader: added tvg format verification TVG format verification was added on TvgLoader:open() --- src/loaders/tvg/tvgTvgLoadParser.cpp | 13 +++++++++++-- src/loaders/tvg/tvgTvgLoadParser.h | 1 + src/loaders/tvg/tvgTvgLoader.cpp | 8 ++------ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/loaders/tvg/tvgTvgLoadParser.cpp b/src/loaders/tvg/tvgTvgLoadParser.cpp index 27131be6..87695e1a 100644 --- a/src/loaders/tvg/tvgTvgLoadParser.cpp +++ b/src/loaders/tvg/tvgTvgLoadParser.cpp @@ -44,6 +44,8 @@ static tvgBlock _readTvgBlock(const char *ptr) static bool _readTvgHeader(const char **ptr) { + if (!*ptr) return false; + //Sign phase, always TVG_BIN_HEADER_SIGNATURE is declared if (memcmp(*ptr, TVG_BIN_HEADER_SIGNATURE, TVG_BIN_HEADER_SIGNATURE_LENGTH)) return false; *ptr += TVG_BIN_HEADER_SIGNATURE_LENGTH; @@ -52,7 +54,7 @@ static bool _readTvgHeader(const char **ptr) if (memcmp(*ptr, TVG_BIN_HEADER_VERSION, TVG_BIN_HEADER_VERSION_LENGTH)) return false; *ptr += TVG_BIN_HEADER_VERSION_LENGTH; - //Mata data for proof? + //Meta data for proof? uint16_t metaLen; _read_tvg_ui16(&metaLen, *ptr); *ptr += 2; @@ -502,6 +504,13 @@ static LoaderResult _parsePaint(tvgBlock base_block, Paint **paint) /* External Class Implementation */ /************************************************************************/ +bool tvgValidateTvgHeader(const char *ptr, uint32_t size) +{ + auto end = ptr + size; + if (!_readTvgHeader(&ptr) || ptr >= end) return false; + return true; +} + unique_ptr tvgLoadTvgData(const char *ptr, uint32_t size) { auto end = ptr + size; @@ -533,4 +542,4 @@ unique_ptr tvgLoadTvgData(const char *ptr, uint32_t size) } return move(scene); -} \ No newline at end of file +} diff --git a/src/loaders/tvg/tvgTvgLoadParser.h b/src/loaders/tvg/tvgTvgLoadParser.h index b976ef5b..915d3088 100644 --- a/src/loaders/tvg/tvgTvgLoadParser.h +++ b/src/loaders/tvg/tvgTvgLoadParser.h @@ -26,6 +26,7 @@ #include "tvgCommon.h" #include "tvgBinaryDesc.h" +bool tvgValidateTvgHeader(const char *ptr, uint32_t size); unique_ptr tvgLoadTvgData(const char *ptr, uint32_t size); #endif //_TVG_TVG_LOAD_PARSER_H_ diff --git a/src/loaders/tvg/tvgTvgLoader.cpp b/src/loaders/tvg/tvgTvgLoader.cpp index a98b7bde..6fc21d60 100644 --- a/src/loaders/tvg/tvgTvgLoader.cpp +++ b/src/loaders/tvg/tvgTvgLoader.cpp @@ -79,9 +79,7 @@ bool TvgLoader::open(const string &path) pointer = buffer; - //FIXME: verify TVG format here. - - return true; + return tvgValidateTvgHeader(pointer, size); } bool TvgLoader::open(const char *data, uint32_t size) @@ -91,9 +89,7 @@ bool TvgLoader::open(const char *data, uint32_t size) this->pointer = data; this->size = size; - //FIXME: verify TVG format here. - - return true; + return tvgValidateTvgHeader(pointer, size); } bool TvgLoader::read()