tvg_loader: added tvg format verification

TVG format verification was added on TvgLoader:open()
This commit is contained in:
mmaciola 2021-06-14 07:18:10 +02:00 committed by GitHub
parent 90dd1b5f98
commit fa15b9a2af
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 8 deletions

View file

@ -44,6 +44,8 @@ static tvgBlock _readTvgBlock(const char *ptr)
static bool _readTvgHeader(const char **ptr) static bool _readTvgHeader(const char **ptr)
{ {
if (!*ptr) return false;
//Sign phase, always TVG_BIN_HEADER_SIGNATURE is declared //Sign phase, always TVG_BIN_HEADER_SIGNATURE is declared
if (memcmp(*ptr, TVG_BIN_HEADER_SIGNATURE, TVG_BIN_HEADER_SIGNATURE_LENGTH)) return false; if (memcmp(*ptr, TVG_BIN_HEADER_SIGNATURE, TVG_BIN_HEADER_SIGNATURE_LENGTH)) return false;
*ptr += TVG_BIN_HEADER_SIGNATURE_LENGTH; *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; if (memcmp(*ptr, TVG_BIN_HEADER_VERSION, TVG_BIN_HEADER_VERSION_LENGTH)) return false;
*ptr += TVG_BIN_HEADER_VERSION_LENGTH; *ptr += TVG_BIN_HEADER_VERSION_LENGTH;
//Mata data for proof? //Meta data for proof?
uint16_t metaLen; uint16_t metaLen;
_read_tvg_ui16(&metaLen, *ptr); _read_tvg_ui16(&metaLen, *ptr);
*ptr += 2; *ptr += 2;
@ -502,6 +504,13 @@ static LoaderResult _parsePaint(tvgBlock base_block, Paint **paint)
/* External Class Implementation */ /* 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<Scene> tvgLoadTvgData(const char *ptr, uint32_t size) unique_ptr<Scene> tvgLoadTvgData(const char *ptr, uint32_t size)
{ {
auto end = ptr + size; auto end = ptr + size;
@ -533,4 +542,4 @@ unique_ptr<Scene> tvgLoadTvgData(const char *ptr, uint32_t size)
} }
return move(scene); return move(scene);
} }

View file

@ -26,6 +26,7 @@
#include "tvgCommon.h" #include "tvgCommon.h"
#include "tvgBinaryDesc.h" #include "tvgBinaryDesc.h"
bool tvgValidateTvgHeader(const char *ptr, uint32_t size);
unique_ptr<Scene> tvgLoadTvgData(const char *ptr, uint32_t size); unique_ptr<Scene> tvgLoadTvgData(const char *ptr, uint32_t size);
#endif //_TVG_TVG_LOAD_PARSER_H_ #endif //_TVG_TVG_LOAD_PARSER_H_

View file

@ -79,9 +79,7 @@ bool TvgLoader::open(const string &path)
pointer = buffer; pointer = buffer;
//FIXME: verify TVG format here. return tvgValidateTvgHeader(pointer, size);
return true;
} }
bool TvgLoader::open(const char *data, uint32_t 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->pointer = data;
this->size = size; this->size = size;
//FIXME: verify TVG format here. return tvgValidateTvgHeader(pointer, size);
return true;
} }
bool TvgLoader::read() bool TvgLoader::read()