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;