Fixed a bug in the LZX decompressor: malicious input data could cause
out of bounds writes to memory (since wimlib v1.2.2).
+ The output of the 'wiminfo' command now consolidates various boolean
+ flags (such as "Relative path junction") into a single line.
+
A file can now have both an unnamed data stream ("file contents") and a
reparse point stream. Such files can exist as a result of the use of
certain Windows features, such as offline storage, including "OneDrive".
# define tmemcpy wmemcpy
# define tmemmove wmemmove
# define tmempcpy wmempcpy
+# define tstrcat wcscat
# define tstrcpy wcscpy
# define tprintf wprintf
# define tsprintf swprintf
# define tmemcpy memcpy
# define tmemmove memmove
# define tmempcpy mempcpy
+# define tstrcat strcat
# define tstrcpy strcpy
# define tprintf printf
# define tsprintf sprintf
static void
print_wim_information(const tchar *wimfile, const struct wimlib_wim_info *info)
{
+ tchar attr_string[256];
+ tchar *p;
+
tputs(T("WIM Information:"));
tputs(T("----------------"));
tprintf(T("Path: %"TS"\n"), wimfile);
tprintf(T("Part Number: %d/%d\n"), info->part_number, info->total_parts);
tprintf(T("Boot Index: %d\n"), info->boot_index);
tprintf(T("Size: %"PRIu64" bytes\n"), info->total_bytes);
- tprintf(T("Integrity Info: %"TS"\n"),
- info->has_integrity_table ? T("yes") : T("no"));
- tprintf(T("Relative path junction: %"TS"\n"),
- info->has_rpfix ? T("yes") : T("no"));
- tprintf(T("Pipable: %"TS"\n"),
- info->pipable ? T("yes") : T("no"));
- tputchar(T('\n'));
+
+ attr_string[0] = T('\0');
+
+ if (info->pipable)
+ tstrcat(attr_string, "Pipable, ");
+
+ if (info->has_integrity_table)
+ tstrcat(attr_string, "Integrity info, ");
+
+ if (info->has_rpfix)
+ tstrcat(attr_string, "Relative path junction, ");
+
+ if (info->resource_only)
+ tstrcat(attr_string, "Resource only, ");
+
+ if (info->metadata_only)
+ tstrcat(attr_string, "Metadata only, ");
+
+ if (info->is_marked_readonly)
+ tstrcat(attr_string, "Readonly, ");
+
+ p = tstrchr(attr_string, '\0');
+ if (p >= &attr_string[2] && p[-1] == T(' ') && p[-2] == T(','))
+ p[-2] = '\0';
+
+ tprintf(T("Attributes: %"TS"\n\n"), attr_string);
}
static int
if ! wimcapture dir dir.wim --check; then
error "Failed to capture WIM with integrity table"
fi
-if ! test "`wiminfo dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then
+if ! wiminfo dir.wim | grep -q Integrity; then
error "Integrity table on WIM not made"
fi
if ! wimapply --check dir.wim tmp; then
if ! wimappend dir2 dir.wim "newname2" --check; then
error "Appending WIM image failed"
fi
-if ! test "`wiminfo dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then
+if ! wiminfo dir.wim | grep -q Integrity; then
error "Integrity table not set correctly on image append"
fi
echo "Testing appending WIM image with no integrity check"
if ! wimappend dir2 dir.wim "newname3" --nocheck; then
error "Appending WIM image failed"
fi
-if ! test "`wiminfo dir.wim | grep Integrity | awk '{print $3}'`" = "no"; then
+if wiminfo dir.wim | grep -q Integrity; then
error "WIM integrity table not removed"
fi
# 5 images at this point
if ! wimappend dir dir.wim "myname" "mydesc" --check --boot; then
error "Couldn't append named, described, bootable image to empty WIM with integrity check"
fi
-if ! test "`wiminfo dir.wim | grep Integrity | awk '{print $3}'`" = "yes"; then
+if ! wiminfo dir.wim | grep -q Integrity; then
error "Integrity check not found"
fi
if ! test "`wiminfo dir.wim | grep '^Boot Index' | awk '{print $3}'`" = "1"; then
if ! imagex_unmount tmp.mnt --commit --check; then
error "Failed to unmount read-write mounted WIM"
fi
-if test "`wiminfo dir.wim | grep Integrity | awk '{print $3}'`" != "yes"; then
+if ! wiminfo dir.wim | grep -q Integrity; then
error "Integrity information was not included"
fi
if ! wimapply dir.wim tmp.apply; then