]> wimlib.net Git - wimlib/blobdiff - src/metadata_resource.c
read_metadata_resource(): Treat initial end-of-directory as empty image
[wimlib] / src / metadata_resource.c
index 13aa5b8dec30cfdb960ed42dea5daffa28917d8d..109b0d32ca2499d308c0a68d8d13d1f1865211f8 100644 (file)
@@ -101,8 +101,7 @@ read_metadata_resource(WIMStruct *wim, struct wim_image_metadata *imd)
                goto out_free_buf;
 
        sha1_buffer(buf, metadata_len, hash);
-       if (!hashes_equal(metadata_lte->hash, hash))
-       {
+       if (!hashes_equal(metadata_lte->hash, hash)) {
                ERROR("Metadata resource is corrupted (invalid SHA-1 message digest)!");
                ret = WIMLIB_ERR_INVALID_RESOURCE_HASH;
                goto out_free_buf;
@@ -139,8 +138,11 @@ read_metadata_resource(WIMStruct *wim, struct wim_image_metadata *imd)
                          imd->security_data->total_length, root);
 
        if (ret == 0 && root->length == 0) {
-               ERROR("Metadata resource cannot begin with end-of-directory entry!");
-               ret = WIMLIB_ERR_INVALID_DENTRY;
+               WARNING("Metadata resource begins with end-of-directory entry "
+                       "(treating as empty image)");
+               FREE(root);
+               root = NULL;
+               goto out_success;
        }
 
        if (ret) {
@@ -176,6 +178,7 @@ read_metadata_resource(WIMStruct *wim, struct wim_image_metadata *imd)
 
        DEBUG("Done reading image metadata");
 
+out_success:
        imd->root_dentry = root;
        INIT_LIST_HEAD(&imd->unhashed_streams);
        goto out_free_buf;