]> wimlib.net Git - wimlib/blobdiff - src/blob_table.c
Disallow image metadata in solid resources
[wimlib] / src / blob_table.c
index 1d87a71761ed219846e5d6395a3f912df83786fa..08859c42787baa5147a398bdacdecae579f69275 100644 (file)
@@ -395,7 +395,7 @@ cmp_blobs_by_sequential_order(const void *p1, const void *p2)
 
        v = (int)blob1->blob_location - (int)blob2->blob_location;
 
-       /* Different resource locations?  */
+       /* Different locations?  */
        if (v)
                return v;
 
@@ -429,6 +429,10 @@ cmp_blobs_by_sequential_order(const void *p1, const void *p2)
 #ifdef __WIN32__
        case BLOB_IN_WINNT_FILE_ON_DISK:
        case BLOB_WIN32_ENCRYPTED:
+               /* Windows: compare by starting LCN (logical cluster number)  */
+               v = cmp_u64(blob1->sort_key, blob2->sort_key);
+               if (v)
+                       return v;
 #endif
                /* Compare files by path: just a heuristic that will place files
                 * in the same directory next to each other.  */
@@ -1018,6 +1022,13 @@ read_blob_table(WIMStruct *wim)
                                goto out;
                        }
 
+                       if (reshdr.flags & WIM_RESHDR_FLAG_SOLID) {
+                               ERROR("Image metadata in solid resources "
+                                     "is unsupported.");
+                               ret = WIMLIB_ERR_INVALID_LOOKUP_TABLE_ENTRY;
+                               goto out;
+                       }
+
                        if (wim->hdr.part_number != 1) {
                                WARNING("Ignoring metadata resource found in a "
                                        "non-first part of the split WIM");