diff --git a/lib/zip_extra_field.c b/lib/zip_extra_field.c
index eb69356..c3d7387 100644
--- a/lib/zip_extra_field.c
+++ b/lib/zip_extra_field.c
@@ -205,8 +205,8 @@
 }
 
 
-zip_extra_field_t *
-_zip_ef_parse(const zip_uint8_t *data, zip_uint16_t len, zip_flags_t flags, zip_error_t *error)
+bool
+_zip_ef_parse(const zip_uint8_t *data, zip_uint16_t len, zip_flags_t flags, zip_extra_field_t **ef_head_p, zip_error_t *error)
 {
     zip_buffer_t *buffer;
     zip_extra_field_t *ef, *ef2, *ef_head;
@@ -218,7 +218,7 @@
     
     ef_head = ef = NULL;
     
-    while (_zip_buffer_ok(buffer) && !_zip_buffer_eof(buffer)) {
+    while (_zip_buffer_ok(buffer) && _zip_buffer_left(buffer) >= 4) {
         zip_uint16_t fid, flen;
         zip_uint8_t *ef_data;
         
@@ -227,14 +227,17 @@
         ef_data = _zip_buffer_get(buffer, flen);
 
         if (ef_data == NULL) {
-            break;
+	    zip_error_set(error, ZIP_ER_INCONS, 0);
+            _zip_buffer_free(buffer);
+	    _zip_ef_free(ef_head);
+	    return false;
         }
         
 	if ((ef2=_zip_ef_new(fid, flen, ef_data, flags)) == NULL) {
 	    zip_error_set(error, ZIP_ER_MEMORY, 0);
             _zip_buffer_free(buffer);
 	    _zip_ef_free(ef_head);
-	    return NULL;
+	    return false;
 	}
 
 	if (ef_head) {
@@ -246,15 +249,26 @@
     }
 
     if (!_zip_buffer_eof(buffer)) {
-        zip_error_set(error, ZIP_ER_INCONS, 0);
-        _zip_buffer_free(buffer);
-        _zip_ef_free(ef_head);
-        return NULL;
+	/* Android APK files align stored file data with padding in extra fields; ignore. */
+	/* see https://android.googlesource.com/platform/build/+/master/tools/zipalign/ZipAlign.cpp */
+	size_t glen = _zip_buffer_left(buffer);
+	zip_uint8_t *garbage;
+	garbage = _zip_buffer_get(buffer, len);
+	if (glen >= 4 || garbage == NULL || memcmp(garbage, "\0\0\0", glen) != 0) {
+	    zip_error_set(error, ZIP_ER_INCONS, 0);
+	    _zip_buffer_free(buffer);
+	    _zip_ef_free(ef_head);
+	    return false;
+	}
     }
 
     _zip_buffer_free(buffer);
+
+    if (ef_head_p) {
+	*ef_head_p = ef_head;
+    }
     
-    return ef_head;
+    return true;
 }
 
 
@@ -398,14 +412,16 @@
 	if (ef_raw == NULL)
 	    return -1;
 
-	if ((ef=_zip_ef_parse(ef_raw, ef_len, ZIP_EF_LOCAL, &za->error)) == NULL) {
+	if (!_zip_ef_parse(ef_raw, ef_len, ZIP_EF_LOCAL, &ef, &za->error)) {
 	    free(ef_raw);
 	    return -1;
 	}
 	free(ef_raw);
-	
-        ef = _zip_ef_remove_internal(ef);
-	e->orig->extra_fields = _zip_ef_merge(e->orig->extra_fields, ef);
+
+	if (ef) {
+	    ef = _zip_ef_remove_internal(ef);
+	    e->orig->extra_fields = _zip_ef_merge(e->orig->extra_fields, ef);
+	}
     }
 
     e->orig->local_extra_fields_read = 1;
