Fix bug with empty fragments.

Also, refactor to avoid static analyzer warning.
diff --git a/lib/zip.h b/lib/zip.h
index 597aeed..2377099 100644
--- a/lib/zip.h
+++ b/lib/zip.h
@@ -404,7 +404,7 @@
 ZIP_EXTERN zip_source_t * _Nullable zip_source_buffer(zip_t * _Nonnull, const void * _Nullable, zip_uint64_t, int);
 ZIP_EXTERN zip_source_t * _Nullable zip_source_buffer_create(const void * _Nullable, zip_uint64_t, int, zip_error_t * _Nullable);
 ZIP_EXTERN zip_source_t * _Nullable zip_source_buffer_fragment(zip_t * _Nonnull, const zip_buffer_fragment_t * _Nonnull, zip_uint64_t, int);
-ZIP_EXTERN zip_source_t * _Nullable zip_source_buffer_fragment_create(const zip_buffer_fragment_t * _Nonnull, zip_uint64_t, int, zip_error_t * _Nullable);
+ZIP_EXTERN zip_source_t * _Nullable zip_source_buffer_fragment_create(const zip_buffer_fragment_t * _Nullable, zip_uint64_t, int, zip_error_t * _Nullable);
 ZIP_EXTERN int zip_source_close(zip_source_t * _Nonnull);
 ZIP_EXTERN int zip_source_commit_write(zip_source_t * _Nonnull);
 ZIP_EXTERN zip_error_t * _Nonnull zip_source_error(zip_source_t * _Nonnull);
diff --git a/lib/zip_source_buffer.c b/lib/zip_source_buffer.c
index 119bc02..b80afca 100644
--- a/lib/zip_source_buffer.c
+++ b/lib/zip_source_buffer.c
@@ -93,9 +93,13 @@
 zip_source_buffer_create(const void *data, zip_uint64_t len, int freep, zip_error_t *error) {
     zip_buffer_fragment_t fragment;
 
-    if (data == NULL && len > 0) {
-	zip_error_set(error, ZIP_ER_INVAL, 0);
-	return NULL;
+    if (data == NULL) {
+        if (len > 0) {
+            zip_error_set(error, ZIP_ER_INVAL, 0);
+            return NULL;
+        }
+
+        return zip_source_buffer_fragment_create(NULL, 0, freep, error);
     }
 
     fragment.data = (zip_uint8_t *)data;
@@ -457,7 +461,7 @@
 	}
 	buffer->nfragments = j;
 	buffer->first_owned_fragment = free_data ? 0 : buffer->nfragments;
-	buffer->fragment_offsets[nfragments] = offset;
+	buffer->fragment_offsets[buffer->nfragments] = offset;
 	buffer->size = offset;
     }