Fix extra field modification functions (clone extra fields before modifying).
Check return value of _zip_dirent_clone().
diff --git a/lib/zip_file_replace.c b/lib/zip_file_replace.c
index a73a261..cc1b72a 100644
--- a/lib/zip_file_replace.c
+++ b/lib/zip_file_replace.c
@@ -93,11 +93,15 @@
     _zip_unchange_data(za->entry+idx);
 
     if (za->entry[idx].orig != NULL && (za->entry[idx].changes == NULL || (za->entry[idx].changes->changed & ZIP_DIRENT_COMP_METHOD) == 0)) {
-	if (za->entry[idx].changes == NULL)
-	    za->entry[idx].changes = _zip_dirent_clone(za->entry[idx].orig);
+        if (za->entry[idx].changes == NULL) {
+            if ((za->entry[idx].changes=_zip_dirent_clone(za->entry[idx].orig)) == NULL) {
+                _zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+                return -1;
+            }
+        }
 
-	za->entry[idx].changes->comp_method = ZIP_CM_REPLACED_DEFAULT;
-	za->entry[idx].changes->changed |= ZIP_DIRENT_COMP_METHOD;
+        za->entry[idx].changes->comp_method = ZIP_CM_REPLACED_DEFAULT;
+        za->entry[idx].changes->changed |= ZIP_DIRENT_COMP_METHOD;
     }
 	
     za->entry[idx].source = source;