Disallow deleting extra fields by index in central & local dir at same time.
diff --git a/lib/zip_extra_field.c b/lib/zip_extra_field.c
index 41fd2b1..8f1ccaa 100644
--- a/lib/zip_extra_field.c
+++ b/lib/zip_extra_field.c
@@ -78,7 +78,7 @@
     head = ef;
     prev = NULL;
     for (; ef; ef=(prev ? prev->next : head)) {
-	if ((ef->flags & flags & ZIP_EF_BOTH) && ef->id == id) {
+	if ((ef->flags & flags & ZIP_EF_BOTH) && ((ef->id == id) || (id == ZIP_EXTRA_FIELD_ALL))) {
 	    if (id_idx == ZIP_EXTRA_FIELD_ALL || i == id_idx) {
 		ef->flags &= ~(flags & ZIP_EF_BOTH);
 		if ((ef->flags & ZIP_EF_BOTH) == 0) {
diff --git a/lib/zip_extra_field_api.c b/lib/zip_extra_field_api.c
index 02ed455..3e936d2 100644
--- a/lib/zip_extra_field_api.c
+++ b/lib/zip_extra_field_api.c
@@ -46,6 +46,11 @@
 	_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
 	return -1;
     }
+
+    if (((flags & ZIP_EF_BOTH) == ZIP_EF_BOTH) && (ef_idx != ZIP_EXTRA_FIELD_ALL)) {
+	_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+	return -1;
+    }
     
     if (_zip_get_dirent(za, idx, 0, NULL) == NULL)
 	return -1;
@@ -75,6 +80,11 @@
 	_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
 	return -1;
     }
+
+    if (((flags & ZIP_EF_BOTH) == ZIP_EF_BOTH) && (ef_idx != ZIP_EXTRA_FIELD_ALL)) {
+	_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+	return -1;
+    }
     
     if (_zip_get_dirent(za, idx, 0, NULL) == NULL)
 	return -1;