From a65f99a64e1937411a9268213c55f1b030df7af5 Mon Sep 17 00:00:00 2001 From: Garden Date: Thu, 18 Dec 2025 21:14:42 +1100 Subject: feat(png): Validate signiture header --- src/format/image/png.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/format/image/png.c (limited to 'src/format/image/png.c') diff --git a/src/format/image/png.c b/src/format/image/png.c new file mode 100644 index 0000000..b29e271 --- /dev/null +++ b/src/format/image/png.c @@ -0,0 +1,37 @@ +#include "tinyff/image/png.h" +#include "png.h" + +ff_result ff_png_isvalid(FILE *file) +{ + char raw_sig[8]; + if (fread(raw_sig, sizeof(char), 8, file) != 8) { + // Inable to read first 8 bytes + fclose(file); + return FF_RESULT_ERROR_INVALID_FILE; + } + + if (memcmp(raw_sig, PNG_SIGNATURE, 8) != 0) { + // Signiture did not match + fclose(file); + return FF_RESULT_ERROR_INVALID_FILE_SIGNITURE; + } + + return FF_RESULT_OK; +} + +ff_png_ctx *ff_open_png(const char *filepath) { + // Validate + + ff_png_ctx ctx; + ctx.raw = fopen(filepath, "rb"); + + if (!ctx.raw) { + return NULL; + } + + if (ff_png_isvalid(ctx.raw) != FF_RESULT_OK) { + return NULL; + } + + // TODO: Parse +} \ No newline at end of file -- cgit v1.2.3