diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2017-02-28 18:38:04 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2017-02-28 19:32:50 +0100 |
commit | d54665c64bfddcb9825721a7254cfcbfec0edcd2 (patch) | |
tree | 89162d9330767afa00f1bb02353a14ffe16468a4 | |
parent | c5e886ed6ec5513a27bec85fdf25deac850eef23 (diff) | |
download | tracker-d54665c64bfddcb9825721a7254cfcbfec0edcd2.tar.gz |
tracker-extract: Avoid allocating full image in memory at once
Just read it line by line reusing the same buffer, it will still
let us to fetch metadata at the end of the file.
https://bugzilla.gnome.org/show_bug.cgi?id=778090
-rw-r--r-- | src/tracker-extract/tracker-extract-png.c | 20 |
1 files changed, 5 insertions, 15 deletions
diff --git a/src/tracker-extract/tracker-extract-png.c b/src/tracker-extract/tracker-extract-png.c index fcfd5f40e..0e1976541 100644 --- a/src/tracker-extract/tracker-extract-png.c +++ b/src/tracker-extract/tracker-extract-png.c @@ -621,7 +621,7 @@ tracker_extract_get_metadata (TrackerExtractInfo *info) png_structp png_ptr; png_infop info_ptr; png_infop end_ptr; - png_bytepp row_pointers; + png_bytep row_data; guint row; png_uint_32 width, height; gint bit_depth, color_type; @@ -694,20 +694,10 @@ tracker_extract_get_metadata (TrackerExtractInfo *info) /* Read the image. FIXME We should be able to skip this step and * just get the info from the end. This causes some errors atm. */ - row_pointers = g_new0 (png_bytep, height); - - for (row = 0; row < height; row++) { - row_pointers[row] = png_malloc (png_ptr, - png_get_rowbytes (png_ptr,info_ptr)); - } - - png_read_image (png_ptr, row_pointers); - - for (row = 0; row < height; row++) { - png_free (png_ptr, row_pointers[row]); - } - - g_free (row_pointers); + row_data = png_malloc (png_ptr, png_get_rowbytes (png_ptr, info_ptr)); + for (row = 0; row < height; row++) + png_read_row (png_ptr, row_data, NULL); + png_free (png_ptr, row_data); png_read_end (png_ptr, end_ptr); |