if (!mm_util_is_proper_image_size(data_size))
return MM_UTIL_ERROR_OUT_OF_MEMORY;
- *data = g_malloc0(data_size);
-
- buffer = (GifByteType *) *data;
+ buffer = g_new0(GifByteType, data_size);
for (i = 0; i < height; i++) {
gif_row = frame_buffer[i];
for (j = 0; j < width; j++) {
+ if (gif_row[j] >= color_map->ColorCount) {
+ mm_util_error("invalid color index=%d, color count=%d", gif_row[j], color_map->ColorCount);
+ g_free(buffer);
+ return MM_UTIL_ERROR_INVALID_OPERATION;
+ }
+
color_map_entry = &color_map->Colors[gif_row[j]];
*buffer++ = color_map_entry->Red;
*buffer++ = color_map_entry->Green;
}
}
+ *data = buffer;
+
return MM_UTIL_ERROR_NONE;
}