]> wimlib.net Git - wimlib/blobdiff - src/lookup_table.c
read_wim_lookup_table(): Zero fields of resource spec until known
[wimlib] / src / lookup_table.c
index 4cae97ce0cbdc7a69b1e7e66a22dbd8bf1bb42dc..f24bf053e5d7e3fa2b4b47ea5e32c79483b40e52 100644 (file)
@@ -721,6 +721,19 @@ read_wim_lookup_table(WIMStruct *wim)
                        }
                        wim_res_hdr_to_spec(&reshdr, wim, cur_rspec);
 
+                       /* If this is a packed run, the current stream entry may
+                        * specify a stream within the resource, and not the
+                        * resource itself.  Zero possibly irrelevant data until
+                        * it is read for certain.  (Note that the computation
+                        * of 'back_to_back_pack' tests if 'size_in_wim' is
+                        * nonzero to see if the resource info has been read;
+                        * hence we need to set it to 0 here.)  */
+                       if (reshdr.flags & WIM_RESHDR_FLAG_PACKED_STREAMS) {
+                               cur_rspec->size_in_wim = 0;
+                               cur_rspec->uncompressed_size = 0;
+                               cur_rspec->offset_in_wim = 0;
+                       }
+
                        if (prev_entry)
                                lte_bind_wim_resource_spec(prev_entry, cur_rspec);
                }