typedef struct {
void *mem;
+ png_size_t mem_size;
png_size_t size;
} png_mem_s;
if (png_mem_ptr == NULL || data == NULL)
return;
- if (png_mem_ptr->mem && size > 0) {
+ mm_util_debug("[TEMP][RDFN] %p, %zu, %zu, %p, %zu", png_mem_ptr->mem, png_mem_ptr->mem_size, png_mem_ptr->size, data, size);
+
+ if (png_mem_ptr->mem && size > 0 && png_mem_ptr->mem_size >= png_mem_ptr->size + size) {
memcpy(data, png_mem_ptr->mem + png_mem_ptr->size, size);
png_mem_ptr->size += size;
}
}
-static int _read_png(FILE *fp, void *memory, mm_util_png_data *decoded)
+static int _read_png(FILE *fp, void *memory, const size_t memory_size, mm_util_png_data *decoded)
{
png_structp png_ptr;
png_infop info_ptr;
guint row_index;
- png_mem_s png_mem_ptr = {memory, 0};
+ png_mem_s png_mem_ptr = {memory, memory_size, 0};
png_property_s png_prop;
mm_util_retvm_if(((fp == NULL) && (memory == NULL)), MM_UTIL_ERROR_INVALID_PARAMETER, "invalid png image");
return ret;
}
- ret = _read_png(fp, NULL, decoded);
+ ret = _read_png(fp, NULL, 0, decoded);
if (ret != MM_UTIL_ERROR_NONE)
mm_util_error("_write_png failed (%d)", ret);
mm_util_fenter();
- ret = _read_png(NULL, memory, decoded);
+ ret = _read_png(NULL, memory, src_size, decoded);
if (ret != MM_UTIL_ERROR_NONE)
mm_util_error("_write_png failed (%d)", ret);