Skip to content

Commit d6186cf

Browse files
authored
webpsave: fix memory leak on error (#4107)
1 parent 26b2938 commit d6186cf

File tree

2 files changed

+5
-11
lines changed

2 files changed

+5
-11
lines changed

ChangeLog

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
- heifsave: fix crash when passing an invalid bitdepth
44
- fix an off-by-one error in vips__token_get()
5+
- webpsave: fix memory leak on error [dloebl]
56

67
11/8/24 8.15.3
78

libvips/foreign/webpsave.c

+4-11
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,8 @@ vips_foreign_save_webp_dispose(GObject *gobject)
217217
{
218218
VipsForeignSaveWebp *webp = (VipsForeignSaveWebp *) gobject;
219219

220+
vips_foreign_save_webp_unset(webp);
221+
220222
VIPS_UNREF(webp->target);
221223

222224
VIPS_FREE(webp->frame_bytes);
@@ -583,7 +585,6 @@ vips_foreign_save_webp_init_config(VipsForeignSaveWebp *webp)
583585
*/
584586
WebPMemoryWriterInit(&webp->memory_writer);
585587
if (!WebPConfigInit(&webp->config)) {
586-
vips_foreign_save_webp_unset(webp);
587588
vips_error("webpsave",
588589
"%s", _("config version error"));
589590
return -1;
@@ -596,7 +597,6 @@ vips_foreign_save_webp_init_config(VipsForeignSaveWebp *webp)
596597
if (!(webp->lossless || webp->near_lossless) &&
597598
!WebPConfigPreset(&webp->config, get_preset(webp->preset),
598599
webp->Q)) {
599-
vips_foreign_save_webp_unset(webp);
600600
vips_error("webpsave", "%s", _("config version error"));
601601
return -1;
602602
}
@@ -613,7 +613,6 @@ vips_foreign_save_webp_init_config(VipsForeignSaveWebp *webp)
613613
webp->config.use_sharp_yuv = 1;
614614

615615
if (!WebPValidateConfig(&webp->config)) {
616-
vips_foreign_save_webp_unset(webp);
617616
vips_error("webpsave", "%s", _("invalid configuration"));
618617
return -1;
619618
}
@@ -730,7 +729,6 @@ vips_foreign_save_webp_build(VipsObject *object)
730729
page_height = vips_image_get_page_height(save->ready);
731730
if (save->ready->Xsize > 16383 || page_height > 16383) {
732731
vips_error("webpsave", _("image too large"));
733-
vips_foreign_save_webp_unset(webp);
734732
return -1;
735733
}
736734

@@ -742,7 +740,6 @@ vips_foreign_save_webp_build(VipsObject *object)
742740
if (webp->frame_bytes == NULL) {
743741
vips_error("webpsave",
744742
_("failed to allocate %zu bytes"), frame_size);
745-
vips_foreign_save_webp_unset(webp);
746743
return -1;
747744
}
748745

@@ -773,16 +770,12 @@ vips_foreign_save_webp_build(VipsObject *object)
773770
if (vips_foreign_save_webp_finish_anim(webp))
774771
return -1;
775772

776-
if (vips_webp_add_metadata(webp)) {
777-
vips_foreign_save_webp_unset(webp);
773+
if (vips_webp_add_metadata(webp))
778774
return -1;
779-
}
780775

781776
if (vips_target_write(webp->target,
782-
webp->memory_writer.mem, webp->memory_writer.size)) {
783-
vips_foreign_save_webp_unset(webp);
777+
webp->memory_writer.mem, webp->memory_writer.size))
784778
return -1;
785-
}
786779

787780
if (vips_target_end(webp->target))
788781
return -1;

0 commit comments

Comments
 (0)