Fix extra field modification functions (clone extra fields before modifying). Check return value of _zip_dirent_clone().
diff --git a/lib/zip_set_file_compression.c b/lib/zip_set_file_compression.c index bbcaa65..e62cf45 100644 --- a/lib/zip_set_file_compression.c +++ b/lib/zip_set_file_compression.c
@@ -70,11 +70,15 @@ } } else { - if (e->changes == NULL) - e->changes = _zip_dirent_clone(e->orig); + if (e->changes == NULL) { + if ((e->changes=_zip_dirent_clone(e->orig)) == NULL) { + _zip_error_set(&za->error, ZIP_ER_MEMORY, 0); + return -1; + } - e->changes->comp_method = method; - e->changes->changed |= ZIP_DIRENT_COMP_METHOD; + e->changes->comp_method = method; + e->changes->changed |= ZIP_DIRENT_COMP_METHOD; + } } return 0;