From ccc7160f81475723471378c2f5b9e59c02351ca4 Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Thu, 18 Jun 2026 16:40:51 +0100 Subject: [PATCH 1/5] [cmp] update Bled to latest and enable progress reporting on decompressed size * Closes #2968 as the new sector alignment fixes from Bled should fix the issue. * This also allows us to report progress against the decompressed data (where the decompressed size can be known), which provides a better user experience. * Also fix a handful of MinGW warnings. --- .vs/bled.vcxproj | 1 + .vs/bled.vcxproj.filters | 3 + src/bled/Makefile.am | 2 +- src/bled/Makefile.in | 11 +- src/bled/bb_archive.h | 12 +- src/bled/bled.c | 45 +- src/bled/bled.h | 7 +- src/bled/bled_size.c | 732 +++++++++++++++++++++++++++++++ src/bled/decompress_bunzip2.c | 4 +- src/bled/decompress_gunzip.c | 4 +- src/bled/decompress_uncompress.c | 4 +- src/bled/decompress_unlzma.c | 6 +- src/bled/decompress_unxz.c | 4 +- src/bled/decompress_unzip.c | 12 +- src/bled/decompress_unzstd.c | 8 +- src/bled/decompress_vtsi.c | 13 +- src/bled/libbb.h | 33 +- src/bled/xz_dec_stream.c | 2 +- src/format.c | 15 +- src/hash.c | 3 +- src/rufus.rc | 10 +- src/stdio.c | 10 +- src/stdlg.c | 12 +- 23 files changed, 878 insertions(+), 75 deletions(-) create mode 100644 src/bled/bled_size.c diff --git a/.vs/bled.vcxproj b/.vs/bled.vcxproj index 7d57bbd6..f4b7c146 100644 --- a/.vs/bled.vcxproj +++ b/.vs/bled.vcxproj @@ -28,6 +28,7 @@ + diff --git a/.vs/bled.vcxproj.filters b/.vs/bled.vcxproj.filters index abbc6ed8..d963ee37 100644 --- a/.vs/bled.vcxproj.filters +++ b/.vs/bled.vcxproj.filters @@ -117,6 +117,9 @@ Source Files + + Source Files + diff --git a/src/bled/Makefile.am b/src/bled/Makefile.am index 23b00401..3e059834 100644 --- a/src/bled/Makefile.am +++ b/src/bled/Makefile.am @@ -1,6 +1,6 @@ noinst_LIBRARIES = libbled.a -libbled_a_SOURCES = bled.c crc32.c data_align.c data_extract_all.c data_skip.c decompress_bunzip2.c \ +libbled_a_SOURCES = bled.c bled_size.c crc32.c data_align.c data_extract_all.c data_skip.c decompress_bunzip2.c \ decompress_gunzip.c decompress_uncompress.c decompress_unlzma.c decompress_unxz.c decompress_unzip.c \ decompress_unzstd.c decompress_vtsi.c filter_accept_all.c filter_accept_list.c filter_accept_reject_list.c \ find_list_entry.c fse_decompress.c header_list.c header_skip.c header_verbose_list.c huf_decompress.c \ diff --git a/src/bled/Makefile.in b/src/bled/Makefile.in index 7619dc50..1a59d13a 100644 --- a/src/bled/Makefile.in +++ b/src/bled/Makefile.in @@ -94,7 +94,8 @@ am__v_AR_1 = libbled_a_AR = $(AR) $(ARFLAGS) libbled_a_LIBADD = am_libbled_a_OBJECTS = libbled_a-bled.$(OBJEXT) \ - libbled_a-crc32.$(OBJEXT) libbled_a-data_align.$(OBJEXT) \ + libbled_a-bled_size.$(OBJEXT) libbled_a-crc32.$(OBJEXT) \ + libbled_a-data_align.$(OBJEXT) \ libbled_a-data_extract_all.$(OBJEXT) \ libbled_a-data_skip.$(OBJEXT) \ libbled_a-decompress_bunzip2.$(OBJEXT) \ @@ -276,7 +277,7 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libbled.a -libbled_a_SOURCES = bled.c crc32.c data_align.c data_extract_all.c data_skip.c decompress_bunzip2.c \ +libbled_a_SOURCES = bled.c bled_size.c crc32.c data_align.c data_extract_all.c data_skip.c decompress_bunzip2.c \ decompress_gunzip.c decompress_uncompress.c decompress_unlzma.c decompress_unxz.c decompress_unzip.c \ decompress_unzstd.c decompress_vtsi.c filter_accept_all.c filter_accept_list.c filter_accept_reject_list.c \ find_list_entry.c fse_decompress.c header_list.c header_skip.c header_verbose_list.c huf_decompress.c \ @@ -346,6 +347,12 @@ libbled_a-bled.o: bled.c libbled_a-bled.obj: bled.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-bled.obj `if test -f 'bled.c'; then $(CYGPATH_W) 'bled.c'; else $(CYGPATH_W) '$(srcdir)/bled.c'; fi` +libbled_a-bled_size.o: bled_size.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-bled_size.o `test -f 'bled_size.c' || echo '$(srcdir)/'`bled_size.c + +libbled_a-bled_size.obj: bled_size.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-bled_size.obj `if test -f 'bled_size.c'; then $(CYGPATH_W) 'bled_size.c'; else $(CYGPATH_W) '$(srcdir)/bled_size.c'; fi` + libbled_a-crc32.o: crc32.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-crc32.o `test -f 'crc32.c' || echo '$(srcdir)/'`crc32.c diff --git a/src/bled/bb_archive.h b/src/bled/bb_archive.h index 36fca55c..284bbffb 100644 --- a/src/bled/bb_archive.h +++ b/src/bled/bb_archive.h @@ -235,17 +235,19 @@ typedef struct transformer_state_t { int dst_fd; const char *dst_dir; /* if non-NULL, extract to dir */ char *dst_name; - uint64_t dst_size; + int64_t src_size; /* size of the source archive */ + int64_t dst_size; /* size of the uncompressed data, if available */ size_t mem_output_size_max; /* if non-zero, decompress to RAM instead of fd */ size_t mem_output_size; char *mem_output_buf; + uint64_t bytes_total; /* used in unzip code only, for directory extraction */ uint64_t bytes_out; - uint64_t bytes_in; /* used in unzip code only: needs to know packed size */ + uint64_t bytes_in; /* used in unzip code only: needs to know packed size */ uint32_t crc32; - time_t mtime; /* gunzip code may set this on exit */ + time_t mtime; /* gunzip code may set this on exit */ - union { /* if we read magic, it's saved here */ + union { /* if we read magic, it's saved here */ uint8_t b[8]; uint16_t b16[4]; uint32_t b32[2]; @@ -276,7 +278,7 @@ static inline int transformer_switch_file(transformer_state_t* xstate) last_slash = i; } if (bled_switch != NULL) - bled_switch(dst, xstate->dst_size); + bled_switch(dst, xstate->bytes_total); dst[last_slash] = 0; bb_make_directory(dst, 0, 0); dst[last_slash] = '/'; diff --git a/src/bled/bled.c b/src/bled/bled.c index f73508e1..37331b43 100644 --- a/src/bled/bled.c +++ b/src/bled/bled.c @@ -1,7 +1,7 @@ /* * Bled (Base Library for Easy Decompression) * - * Copyright © 2014-2024 Pete Batard + * Copyright © 2014-2026 Pete Batard * * Licensed under GPLv2 or later, see file LICENSE in this source tree. */ @@ -15,27 +15,29 @@ #include "bb_archive.h" #include "bled.h" -typedef long long int(*unpacker_t)(transformer_state_t *xstate); +typedef int64_t(*unpacker_t)(transformer_state_t *xstate); +extern int64_t get_uncompressed_size(int fd, int type); /* Globals */ smallint bb_got_signal; -uint64_t bb_total_rb; +uint64_t bb_total_rb, bb_total_wb; printf_t bled_printf = NULL; read_t bled_read = NULL; write_t bled_write = NULL; progress_t bled_progress = NULL; switch_t bled_switch = NULL; unsigned long* bled_cancel_request; -static bool bled_initialized = 0; +bool bled_initialized = 0; jmp_buf bb_error_jmp; char* bb_virtual_buf = NULL; size_t bb_virtual_len = 0, bb_virtual_pos = 0; int bb_virtual_fd = -1; +bool bb_progress_on_write = 0; // ZSTD has a minimal buffer size of (1 << ZSTD_BLOCKSIZELOG_MAX) + ZSTD_blockHeaderSize = 128 KB + 3 // So we set our bufsize to 256 KB uint32_t BB_BUFSIZE = 0x40000; -static long long int unpack_none(transformer_state_t *xstate) +static int64_t unpack_none(transformer_state_t *xstate) { bb_error_msg("This compression type is not supported"); return -1; @@ -66,6 +68,7 @@ int64_t bled_uncompress(const char* src, const char* dst, int type) } bb_total_rb = 0; + bb_total_wb = 0; init_transformer_state(&xstate); xstate.src_fd = -1; xstate.dst_fd = -1; @@ -87,6 +90,14 @@ int64_t bled_uncompress(const char* src, const char* dst, int type) goto err; } + if (bled_progress != NULL) { + xstate.src_size = lseek(xstate.src_fd, 0, SEEK_END); + xstate.dst_size = get_uncompressed_size(xstate.src_fd, type); + + bb_progress_on_write = (xstate.dst_size > 0); + bled_progress(bb_progress_on_write ? -xstate.dst_size : -xstate.src_size); + } + if (setjmp(bb_error_jmp)) goto err; @@ -112,6 +123,7 @@ int64_t bled_uncompress_with_handles(HANDLE hSrc, HANDLE hDst, int type) } bb_total_rb = 0; + bb_total_wb = 0; init_transformer_state(&xstate); xstate.src_fd = -1; xstate.dst_fd = -1; @@ -133,6 +145,13 @@ int64_t bled_uncompress_with_handles(HANDLE hSrc, HANDLE hDst, int type) return -1; } + if (bled_progress != NULL) { + xstate.src_size = lseek(xstate.src_fd, 0, SEEK_END); + xstate.dst_size = get_uncompressed_size(xstate.src_fd, type); + bb_progress_on_write = (xstate.dst_size > 0); + bled_progress(bb_progress_on_write ? -xstate.dst_size : -xstate.src_size); + } + if (setjmp(bb_error_jmp)) return -1; @@ -156,6 +175,7 @@ int64_t bled_uncompress_to_buffer(const char* src, char* buf, size_t size, int t } bb_total_rb = 0; + bb_total_wb = 0; init_transformer_state(&xstate); xstate.src_fd = -1; xstate.dst_fd = -1; @@ -179,6 +199,13 @@ int64_t bled_uncompress_to_buffer(const char* src, char* buf, size_t size, int t goto err; } + if (bled_progress != NULL) { + xstate.src_size = lseek(xstate.src_fd, 0, SEEK_END); + xstate.dst_size = get_uncompressed_size(xstate.src_fd, type); + bb_progress_on_write = (xstate.dst_size > 0); + bled_progress(bb_progress_on_write ? -xstate.dst_size : -xstate.src_size); + } + if (setjmp(bb_error_jmp)) goto err; @@ -203,6 +230,7 @@ int64_t bled_uncompress_to_dir(const char* src, const char* dir, int type) } bb_total_rb = 0; + bb_total_wb = 0; init_transformer_state(&xstate); xstate.src_fd = -1; xstate.dst_fd = -1; @@ -221,6 +249,13 @@ int64_t bled_uncompress_to_dir(const char* src, const char* dir, int type) goto err; } + if (bled_progress != NULL) { + xstate.src_size = lseek(xstate.src_fd, 0, SEEK_END); + xstate.dst_size = 0; + bb_progress_on_write = 0; + bled_progress(-xstate.src_size); + } + if (setjmp(bb_error_jmp)) goto err; diff --git a/src/bled/bled.h b/src/bled/bled.h index 7a354cad..3524e916 100644 --- a/src/bled/bled.h +++ b/src/bled/bled.h @@ -1,7 +1,7 @@ /* * Bled (Base Library for Easy Decompression) * - * Copyright © 2014-2024 Pete Batard + * Copyright © 2014-2026 Pete Batard * * Licensed under GPLv2 or later, see file LICENSE in this source tree. */ @@ -16,7 +16,7 @@ #endif typedef void (*printf_t) (const char* format, ...); -typedef void (*progress_t) (const uint64_t read_bytes); +typedef void (*progress_t) (const int64_t read_bytes); typedef int (*read_t)(int fd, void* buf, unsigned int count); typedef int (*write_t)(int fd, const void* buf, unsigned int count); typedef void (*switch_t)(const char* filename, const uint64_t size); @@ -35,6 +35,9 @@ typedef enum { BLED_COMPRESSION_MAX } bled_compression_type; +/* (Where possible) get the uncompressed size of file 'src', compressed using 'type' */ +int64_t bled_get_uncompressed_size(const char* src, int type); + /* Uncompress file 'src', compressed using 'type', to file 'dst' */ int64_t bled_uncompress(const char* src, const char* dst, int type); diff --git a/src/bled/bled_size.c b/src/bled/bled_size.c new file mode 100644 index 00000000..ee5a9736 --- /dev/null +++ b/src/bled/bled_size.c @@ -0,0 +1,732 @@ +/* + * Bled (Base Library for Easy Decompression) - Size related dependencies + * + * Mostly generated by AI - No copyright assigned. + * + * Licensed under GPLv2 or later, see file LICENSE in this source tree. + */ + +#ifdef _CRTDBG_MAP_ALLOC +#include +#include +#endif + +#include "libbb.h" +#include "bb_archive.h" +#include "bled.h" + +typedef int64_t(*get_uncompressed_size_t)(int fd); + +/* ------------------------------------------------------------------------- + * Internal helpers + * ---------------------------------------------------------------------- */ + +#define DECOMP_SIZE_ERROR ((int64_t)-1) +#define DECOMP_SIZE_UNKNOWN ((int64_t)-2) +#define DECOMP_IO_ERROR ((int64_t)-3) + + /** Read exactly n bytes from fd into buf; returns 0 on success, -1 on error. */ +static int read_exact(int fd, void* buf, size_t n) +{ + uint8_t* p = (uint8_t*)buf; + while (n > 0) { + int got = _read(fd, p, (unsigned)n); + if (got <= 0) + return -1; + p += got; + n -= (size_t)got; + } + return 0; +} + +int64_t get_uncompress_size_none(int fd) +{ + return DECOMP_SIZE_UNKNOWN; +} + +/* ------------------------------------------------------------------------- + * PKZIP + * + * Local File Header layout (all fields little-endian): + * + * Offset Size Field + * 0 4 Signature (0x04034b50) + * 4 2 Version needed + * 6 2 General purpose bit flag + * 8 2 Compression method + * 10 2 Last mod file time + * 12 2 Last mod file date + * 14 4 CRC-32 + * 18 4 Compressed size (0xFFFFFFFF → see ZIP64 Extra Field) + * 22 4 Uncompressed size (0xFFFFFFFF → see ZIP64 Extra Field) + * 26 2 File name length + * 28 2 Extra field length + * 30 ? File name + * 30+n ? Extra field + * + * ZIP64 Extra Field tag: 0x0001 + * Within the ZIP64 extra field block the fields appear only when the + * corresponding 32-bit field in the Local Header is 0xFFFFFFFF: + * - Original size (8 bytes LE) ← first, if uncompressed == 0xFFFFFFFF + * - Compressed size (8 bytes LE) ← second, if compressed == 0xFFFFFFFF + * ---------------------------------------------------------------------- */ + +#define ZIP_LFH_SIG UINT32_C(0x04034b50) +#define ZIP_LFH_HDR_SIZE 30 +#define ZIP64_EXTRA_TAG 0x0001 +#define ZIP32_NEEDS_ZIP64 UINT32_C(0xFFFFFFFF) + +static int64_t get_uncompress_size_zip(int fd) +{ + uint8_t hdr[ZIP_LFH_HDR_SIZE]; + + if (lseek(fd, 0, SEEK_SET) < 0) + return DECOMP_SIZE_ERROR; + if (read_exact(fd, hdr, ZIP_LFH_HDR_SIZE)) + return DECOMP_SIZE_ERROR; + + /* Verify Local File Header signature. */ + if (get_le32(hdr + 0) != ZIP_LFH_SIG) + return DECOMP_SIZE_ERROR; + + uint32_t uncomp32 = get_le32(hdr + 22); + uint32_t comp32 = get_le32(hdr + 18); + uint16_t fname_len = get_le16(hdr + 26); + uint16_t extra_len = get_le16(hdr + 28); + + /* Fast path: 32-bit field is valid. */ + if (uncomp32 != ZIP32_NEEDS_ZIP64) + return (int64_t)uncomp32; + + /* Need ZIP64 Extra Field – skip over the file name first. */ + if (lseek(fd, (int64_t)fname_len, SEEK_CUR) < 0) + return DECOMP_SIZE_ERROR; + + /* Walk the extra field TLV blocks looking for tag 0x0001. */ + uint16_t remaining = extra_len; + while (remaining >= 4) { + uint8_t tag_buf[4]; + if (read_exact(fd, tag_buf, 4)) + return DECOMP_SIZE_ERROR; + remaining = (uint16_t)(remaining - 4); + + uint16_t tag = get_le16(tag_buf + 0); + uint16_t dlen = get_le16(tag_buf + 2); + + if (tag == ZIP64_EXTRA_TAG) { + /* + * Fields are present only when the corresponding 32-bit value is + * 0xFFFFFFFF. Uncompressed size comes first; we need 8 bytes. + */ + if (uncomp32 == ZIP32_NEEDS_ZIP64) { + if (dlen < 8 || remaining < 8) + return DECOMP_SIZE_ERROR; + uint8_t sz[8]; + if (read_exact(fd, sz, 8)) + return DECOMP_SIZE_ERROR; + return (int64_t)get_le64(sz); + } + } + + /* Skip this block. */ + if (dlen > remaining) return DECOMP_SIZE_ERROR; + if (lseek(fd, (int64_t)dlen, SEEK_CUR) < 0) + return DECOMP_SIZE_ERROR; + remaining = (uint16_t)(remaining - dlen); + (void)comp32; /* suppress unused-variable warning */ + } + + return DECOMP_SIZE_ERROR; /* ZIP64 tag not found */ +} + +/* ------------------------------------------------------------------------- + * GZIP + * + * The ISIZE field is the last 4 bytes of the file (little-endian uint32). + * It holds the decompressed size modulo 2^32. + * + * Header magic: 0x1F 0x8B + * ---------------------------------------------------------------------- */ + +#define GZIP_MAGIC_0 0x1F +#define GZIP_MAGIC_1 0x8B + +static int64_t get_uncompress_size_gz(int fd) +{ + /* Verify magic bytes at offset 0. */ + uint8_t magic[2]; + if (lseek(fd, 0, SEEK_SET) < 0) + return DECOMP_SIZE_ERROR; + if (read_exact(fd, magic, 2)) + return DECOMP_SIZE_ERROR; + if (magic[0] != GZIP_MAGIC_0 || magic[1] != GZIP_MAGIC_1) + return DECOMP_SIZE_ERROR; + + /* Seek to ISIZE: last 4 bytes of the file. */ + if (lseek(fd, -4, SEEK_END) < 0) + return DECOMP_SIZE_ERROR; + + uint8_t isize[4]; + if (read_exact(fd, isize, 4)) + return DECOMP_SIZE_ERROR; + + /* + * ISIZE is uint32 mod 2^32. We return it as int64_t; callers that need + * to handle files >= 4 GiB must apply their own correction. + */ + return (int64_t)(uint64_t)get_le32(isize); +} + +/* ------------------------------------------------------------------------- + * LZMA (.lzma "alone" format) + * + * Header layout: + * Offset Size Field + * 0 1 Properties byte (lc, lp, pb encoded) + * 1 4 Dictionary size (uint32 LE) + * 5 8 Uncompressed size (uint64 LE; + * 0xFFFFFFFFFFFFFFFF → unknown, uses EOS marker) + * ---------------------------------------------------------------------- */ + +#define LZMA_HEADER_SIZE 13 /* 1 + 4 + 8 */ +#define LZMA_SIZE_UNKNOWN UINT64_C(0xFFFFFFFFFFFFFFFF) + +static int64_t get_uncompress_size_lzma(int fd) +{ + uint8_t hdr[LZMA_HEADER_SIZE]; + + if (lseek(fd, 0, SEEK_SET) < 0) + return DECOMP_SIZE_ERROR; + if (read_exact(fd, hdr, LZMA_HEADER_SIZE)) + return DECOMP_SIZE_ERROR; + + /* + * Basic sanity check on the properties byte: + * lc = props % 9, lp = (props / 9) % 5, pb = props / 45 + * pb must be <= 4, so the byte must be < 225 (9 * 5 * 5). + */ + if (hdr[0] >= 225) + return DECOMP_SIZE_ERROR; + + uint64_t size = get_le64(hdr + 5); + if (size == LZMA_SIZE_UNKNOWN) + return DECOMP_SIZE_UNKNOWN; + + return (int64_t)size; +} + +/* ------------------------------------------------------------------------- + * XZ (.xz) + * + * An XZ file is one or more Streams, each structured as: + * + * Stream Header (12 bytes) + * Block(s) (variable) + * Index (variable) + * Stream Footer (12 bytes) + * + * Stream Footer layout (little-endian unless noted): + * Offset Size Field + * 0 4 CRC32 of bytes 4..7 + * 4 4 Backward Size (uint32 LE; index_size = (value+1)*4) + * 8 2 Stream Flags (must match Stream Header flags) + * 10 2 Magic (0x59 0x5A) + * + * Index layout (immediately before Stream Footer): + * [0] 1 Indicator byte (must be 0x00) + * [1] VLI Number of Records + * per record: + * VLI Unpadded Size of the compressed Block + * VLI Uncompressed Size of the Block ← what we want + * padding to 4-byte boundary + * 4 CRC32 of the Index + * + * VLI encoding: up to 9 bytes; each byte contributes 7 bits (little-endian + * bit order); the MSB is a continuation flag (1 = more bytes follow). + * Maximum value: 2^63 - 1 (high bit of the 9th byte must be 0). + * ---------------------------------------------------------------------- */ + +#define XZ_STREAM_FOOTER_SIZE 12 +#define XZ_MAGIC_0 0xFDu +#define XZ_MAGIC_1 0x37u +#define XZ_MAGIC_2 0x7Au +#define XZ_MAGIC_3 0x58u +#define XZ_MAGIC_4 0x5Au +#define XZ_MAGIC_5 0x00u +#define XZ_FOOTER_MAGIC_0 0x59u +#define XZ_FOOTER_MAGIC_1 0x5Au + + /** + * Decode one XZ/LZMA2 VLI from buf[*pos], advancing *pos. + * Returns the value, or UINT64_MAX on error (overlong / overflow). + */ +static uint64_t xz_read_vli(const uint8_t* buf, size_t buf_len, size_t* pos) +{ + uint64_t val = 0; + int shift = 0; + + for (;;) { + if (*pos >= buf_len) return UINT64_MAX; /* truncated */ + if (shift >= 63) return UINT64_MAX; /* overlong */ + + uint8_t b = buf[(*pos)++]; + val |= (uint64_t)(b & 0x7Fu) << shift; + shift += 7; + + if (!(b & 0x80u)) + return val; + } +} + +static int64_t get_uncompress_size_xz(int fd) +{ + /* ---- Verify Stream Header magic (6 bytes at offset 0) ---- */ + uint8_t hdr_magic[6]; + if (lseek(fd, 0, SEEK_SET) < 0) + return DECOMP_SIZE_ERROR; + if (read_exact(fd, hdr_magic, 6)) + return DECOMP_SIZE_ERROR; + if (hdr_magic[0] != XZ_MAGIC_0 || hdr_magic[1] != XZ_MAGIC_1 || + hdr_magic[2] != XZ_MAGIC_2 || hdr_magic[3] != XZ_MAGIC_3 || + hdr_magic[4] != XZ_MAGIC_4 || hdr_magic[5] != XZ_MAGIC_5) + return DECOMP_SIZE_ERROR; + + /* ---- Read Stream Footer ---- */ + if (lseek(fd, -(int64_t)XZ_STREAM_FOOTER_SIZE, SEEK_END) < 0) + return DECOMP_SIZE_ERROR; + + uint8_t footer[XZ_STREAM_FOOTER_SIZE]; + if (read_exact(fd, footer, XZ_STREAM_FOOTER_SIZE)) + return DECOMP_SIZE_ERROR; + + /* Check footer magic bytes at offset 10-11 */ + if (footer[10] != XZ_FOOTER_MAGIC_0 || footer[11] != XZ_FOOTER_MAGIC_1) + return DECOMP_SIZE_ERROR; + + /* Backward Size: real Index size = (backward_size + 1) * 4 */ + uint32_t backward_size = get_le32(footer + 4); + size_t index_size = ((size_t)backward_size + 1u) * 4u; + + /* ---- Read Index block ---- */ + int64_t index_offset = + -(int64_t)XZ_STREAM_FOOTER_SIZE - (int64_t)index_size; + if (lseek(fd, index_offset, SEEK_END) < 0) + return DECOMP_SIZE_ERROR; + + uint8_t* index_buf = (uint8_t*) + _alloca(index_size); + if (read_exact(fd, index_buf, index_size)) + return DECOMP_SIZE_ERROR; + + /* ---- Parse Index ---- */ + size_t pos = 0; + + /* Indicator byte must be 0x00 */ + if (index_buf[pos++] != 0x00u) + return DECOMP_SIZE_ERROR; + + /* Number of Records */ + uint64_t num_records = xz_read_vli(index_buf, index_size, &pos); + if (num_records == UINT64_MAX || num_records == 0) + return DECOMP_SIZE_ERROR; + + /* Sum uncompressed sizes across all records */ + uint64_t total = 0; + for (uint64_t r = 0; r < num_records; r++) { + /* Unpadded Size (compressed) — skip it */ + uint64_t unpadded = xz_read_vli(index_buf, index_size, &pos); + if (unpadded == UINT64_MAX || unpadded == 0) + return DECOMP_SIZE_ERROR; + + /* Uncompressed Size — accumulate */ + uint64_t uncomp = xz_read_vli(index_buf, index_size, &pos); + if (uncomp == UINT64_MAX) + return DECOMP_SIZE_ERROR; + + total += uncomp; + } + + return (int64_t)total; +} + +/* ------------------------------------------------------------------------- + * 7-ZIP (.7z) + * + * Signature Header (32 bytes at offset 0): + * Offset Size Field + * 0 6 Signature (0x37 0x7A 0xBC 0xAF 0x27 0x1C) + * 6 1 Major version + * 7 1 Minor version + * 8 4 CRC32 of bytes 12..27 + * 12 8 NextHeader Offset (uint64 LE, relative to offset 32) + * 20 8 NextHeader Size (uint64 LE) + * 28 4 NextHeader CRC32 + * + * The End Header lives at file offset 32 + NextHeaderOffset. + * Its property-block stream (for a plain, non-encoded-header archive) is: + * + * kHeader (0x01) + * kMainStreamsInfo (0x04) + * kPackInfo (0x06) + * 7z-num: PackPos + * 7z-num: NumPackStreams + * kSize (0x09) + * NumPackStreams × 7z-num packed sizes + * kEnd (0x00) + * kUnPackInfo (0x07) + * kFolder (0x0b) + * 7z-num: NumFolders (must be 1 for single-file) + * byte: External (0 = inline folder data) + * [inline] 7z-num: NumCoders + * per coder: + * byte: flags (bits[3:0]=CodecIdSize, bit4=IsComplex, bit5=HasAttrs) + * CodecIdSize bytes: Codec ID + * if IsComplex: 7z-num NumInStreams, 7z-num NumOutStreams + * if HasAttrs: 7z-num AttrSize, AttrSize bytes Attributes + * [if NumCoders>1] BindPairs, PackedStreams (skipped here) + * kCodersUnPackSize (0x0c) + * 7z-num: uncompressed size ← what we want + * [optional kCRC (0x0a)] + * kEnd (0x00) + * [optional kSubStreamsInfo (0x08)] + * kEnd (0x00) + * [kFilesInfo (0x05) ...] + * kEnd (0x00) + * + * 7z variable-length number encoding: + * The first byte's leading 1-bits count how many extra bytes follow. + * extra=0 → value in bits[6:0] of first byte (7 bits) + * extra=1 → bits[5:0] of first byte + 8 bits of second (14 bits) + * ... + * extra=8 → 0xFF marker + full uint64 in next 8 bytes + * ---------------------------------------------------------------------- */ + +static const uint8_t SZ_SIG[6] = { 0x37,0x7A,0xBC,0xAF,0x27,0x1C }; + +#define SZ_kEnd 0x00u +#define SZ_kHeader 0x01u +#define SZ_kMainStreamsInfo 0x04u +#define SZ_kPackInfo 0x06u +#define SZ_kUnPackInfo 0x07u +#define SZ_kSize 0x09u +#define SZ_kFolder 0x0Bu +#define SZ_kCodersUnPackSize 0x0Cu +#define SZ_kEncodedHeader 0x17u + +/** + * Decode one 7z variable-length number from buf[*pos], advancing *pos. + * + * Algorithm from the 7-zip SDK (CPP/7zip/Archive/7z/7zIn.cpp ReadNumber): + * mask starts at 0x80 and shifts right each iteration. + * While (firstByte & mask) != 0: read one more byte into low bits of value. + * When the stop bit is found: add (firstByte & (mask-1)) into the + * appropriately shifted position. + * + * Returns UINT64_MAX on error (buffer overrun). + */ +static uint64_t sz_read_num(const uint8_t* buf, size_t buf_len, size_t* pos) +{ + if (*pos >= buf_len) return UINT64_MAX; + + uint8_t first = buf[(*pos)++]; + uint8_t mask = 0x80u; + uint64_t value = 0; + + for (int i = 0; i < 8; i++) { + if ((first & mask) == 0) { + /* Stop bit found: the remaining bits of first contribute here */ + uint64_t high_part = first & (uint64_t)(mask - 1u); + value += high_part << (i * 8); + return value; + } + /* Consume one more byte into bits [i*8 .. i*8+7] of value */ + if (*pos >= buf_len) return UINT64_MAX; + value |= (uint64_t)buf[(*pos)++] << (i * 8); + mask = (uint8_t)(mask >> 1); + } + /* first == 0xFF: all 8 extra bytes consumed, value is complete */ + return value; +} + +static int64_t get_uncompress_size_7zip(int fd) +{ + /* ---- Read & verify Signature Header (32 bytes) ---- */ + uint8_t sig_hdr[32]; + if (lseek(fd, 0, SEEK_SET) < 0) + return DECOMP_SIZE_ERROR; + if (read_exact(fd, sig_hdr, 32)) + return DECOMP_SIZE_ERROR; + if (memcmp(sig_hdr, SZ_SIG, 6) != 0) + return DECOMP_SIZE_ERROR; + + uint64_t nh_offset = get_le64(sig_hdr + 12); + uint64_t nh_size = get_le64(sig_hdr + 20); + + if (nh_size == 0 || nh_size > (uint64_t)64 * 1024 * 1024) + return DECOMP_SIZE_ERROR; /* sanity cap: 64 MiB */ + + /* ---- Read End Header ---- */ + int64_t eh_abs = (int64_t)(32u + nh_offset); + if (lseek(fd, eh_abs, SEEK_SET) < 0) return DECOMP_SIZE_ERROR; + + uint8_t* eh = (uint8_t*) + _alloca((size_t)nh_size); + if (read_exact(fd, eh, (size_t)nh_size)) return DECOMP_SIZE_ERROR; + + size_t pos = 0; + size_t len = (size_t)nh_size; + + /* + * Helpers that operate on (eh, len, pos) in the enclosing scope. + * We avoid macros that embed do-while inside comma-expressions (not + * valid in C99); instead use explicit checks before each read. + */ +#define SZ_NEED(n) \ + do { if (pos + (size_t)(n) > len) return DECOMP_SIZE_ERROR; } while (0) +#define SZ_BYTE(var) \ + do { SZ_NEED(1); (var) = eh[pos++]; } while (0) +#define SZ_NUM(var) \ + do { (var) = sz_read_num(eh, len, &pos); \ + if ((var) == UINT64_MAX) return DECOMP_SIZE_ERROR; } while (0) +#define SZ_SKIP(n) \ + do { SZ_NEED(n); pos += (size_t)(n); } while (0) +#define SZ_EXPECT(tag) \ + do { uint8_t _b; SZ_BYTE(_b); \ + if (_b != (tag)) return DECOMP_SIZE_ERROR; } while (0) + + uint8_t first_tag; + uint64_t num_pack, num_folders, num_coders, unpack_size; + + /* Expect kHeader */ + SZ_EXPECT(SZ_kHeader); + + /* kEncodedHeader (0x17) means the real header is itself compressed; + * that requires decompressing a sub-stream, which we do not support. */ + SZ_NEED(1); + if (eh[pos] == SZ_kEncodedHeader) + return DECOMP_SIZE_ERROR; + + SZ_EXPECT(SZ_kMainStreamsInfo); + SZ_EXPECT(SZ_kPackInfo); + + /* PackPos (discard) then NumPackStreams */ + { uint64_t dummy; SZ_NUM(dummy); (void)dummy; } + SZ_NUM(num_pack); + + /* kSize: skip NumPackStreams packed-size VLIs */ + SZ_EXPECT(SZ_kSize); + for (uint64_t i = 0; i < num_pack; i++) { + uint64_t dummy; SZ_NUM(dummy); (void)dummy; + } + SZ_EXPECT(SZ_kEnd); /* closes kPackInfo */ + + SZ_EXPECT(SZ_kUnPackInfo); + SZ_EXPECT(SZ_kFolder); + + SZ_NUM(num_folders); + if (num_folders != 1) + return DECOMP_SIZE_ERROR; /* only single-folder archives supported */ + + { + uint8_t external; SZ_BYTE(external); + if (external != 0) + return DECOMP_SIZE_ERROR; + } /* external not supported */ + +/* Parse the inline folder record to skip past coder descriptors */ + SZ_NUM(num_coders); + if (num_coders == 0) return DECOMP_SIZE_ERROR; + + for (uint64_t c = 0; c < num_coders; c++) { + uint8_t flags; + SZ_BYTE(flags); + uint8_t id_size = flags & 0x0Fu; + int is_complex = (flags >> 4) & 1; + int has_attrs = (flags >> 5) & 1; + + SZ_SKIP(id_size); /* Codec ID bytes */ + + if (is_complex) { + uint64_t dummy; + SZ_NUM(dummy); (void)dummy; /* NumInStreams */ + SZ_NUM(dummy); (void)dummy; /* NumOutStreams */ + } + if (has_attrs) { + uint64_t attr_size; SZ_NUM(attr_size); + SZ_SKIP(attr_size); + } + } + + /* Multi-coder folders have BindPairs and possibly PackedStreams indices */ + if (num_coders > 1) { + for (uint64_t i = 0; i < num_coders - 1; i++) { + uint64_t dummy; + SZ_NUM(dummy); (void)dummy; /* InIndex */ + SZ_NUM(dummy); (void)dummy; /* OutIndex */ + } + if (num_pack > num_coders - 1) { + uint64_t n = num_pack - (num_coders - 1); + for (uint64_t i = 0; i < n; i++) { + uint64_t dummy; SZ_NUM(dummy); (void)dummy; + } + } + } + + /* kCodersUnPackSize: one VLI per output stream (single folder → one value) */ + SZ_NEED(1); + first_tag = eh[pos++]; + if (first_tag != SZ_kCodersUnPackSize) return DECOMP_SIZE_ERROR; + + SZ_NUM(unpack_size); + return (int64_t)unpack_size; + +#undef SZ_NEED +#undef SZ_BYTE +#undef SZ_NUM +#undef SZ_SKIP +#undef SZ_EXPECT +} + +/* ------------------------------------------------------------------------- + * Ventoy Sparse Image (.vsti) + * ---------------------------------------------------------------------- */ + +static int64_t get_uncompress_size_vtsi(int fd) +{ + if (lseek(fd, -512 + 8 + 4, SEEK_END) < 0) + return DECOMP_SIZE_ERROR; + + uint8_t isize[8]; + if (read_exact(fd, isize, 8)) + return DECOMP_SIZE_ERROR; + + return (int64_t)get_le64(isize); +} + +/* ------------------------------------------------------------------------- + * Zstandard (.zst) + * + * Frame layout: + * Offset Size Field + * 0 4 Magic (0xFD2FB528, LE) + * 4 1 Frame Header Descriptor (FHD) + * 5 0/1 Window_Descriptor (absent when Single_Segment_Flag set) + * ? 0/1/2/4/8 Content_Size + * + * FHD bits: + * [7:6] Frame_Content_Size_Flag (FCS_Flag) + * [5] Single_Segment_Flag (SS_Flag) + * [4] reserved (must be 0) + * [3] Content_Checksum_Flag + * [2] reserved (must be 0) + * [1:0] Dictionary_ID_Flag + * + * Content_Size size from FCS_Flag: + * 0 → 0 bytes if SS_Flag==0 (unknown), or 1 byte if SS_Flag==1 + * 1 → 2 bytes (value + 256, to avoid overlap with 1-byte encoding) + * 2 → 4 bytes + * 3 → 8 bytes + * ---------------------------------------------------------------------- */ + +#define ZSTD_MAGIC UINT32_C(0xFD2FB528) +#define ZSTD_MAGIC_SIZE 4 + +static int64_t get_uncompress_size_zstd(int fd) +{ + uint8_t buf[4 + 1 + 1]; /* magic + FHD + optional Window_Descriptor */ + + if (lseek(fd, 0, SEEK_SET) < 0) + return DECOMP_SIZE_ERROR; + if (read_exact(fd, buf, 6)) + return DECOMP_SIZE_ERROR; + + if (get_le32(buf) != ZSTD_MAGIC) + return DECOMP_SIZE_ERROR; + + uint8_t fhd = buf[4]; + int fcs_flag = (fhd >> 6) & 0x03; + int ss_flag = (fhd >> 5) & 0x01; + + /* Window_Descriptor is present only when Single_Segment_Flag == 0. + * buf[5] already consumed it; if SS_Flag==1 that byte is Content_Size[0]. + * We'll re-seek to the correct offset to avoid confusion. */ + + /* Determine Content_Size field size. */ + int cs_bytes; + if (fcs_flag == 0) { + if (ss_flag == 0) + return DECOMP_SIZE_UNKNOWN; /* field absent */ + cs_bytes = 1; + } else if (fcs_flag == 1) { + cs_bytes = 2; + } else if (fcs_flag == 2) { + cs_bytes = 4; + } else { + cs_bytes = 8; + } + + /* + * Content_Size starts at: + * offset 5 if Single_Segment_Flag == 1 (no Window_Descriptor) + * offset 6 if Single_Segment_Flag == 0 (Window_Descriptor present) + */ + int64_t cs_offset = (ss_flag ? 5 : 6); + + if (lseek(fd, cs_offset, SEEK_SET) < 0) + return DECOMP_SIZE_ERROR; + + uint8_t cs_buf[8] = { 0 }; + if (read_exact(fd, cs_buf, (size_t)cs_bytes)) + return DECOMP_SIZE_ERROR; + + uint64_t size; + switch (cs_bytes) { + case 1: + size = cs_buf[0]; + break; + case 2: + /* + * 2-byte encoding: actual value = field_value + 256 + * (reserves 0-255 for the 1-byte SS_Flag path) + */ + size = (uint64_t)get_le16(cs_buf) + 256U; + break; + case 4: + size = get_le32(cs_buf); + break; + default: /* 8 */ + size = get_le64(cs_buf); + break; + } + + return (int64_t)size; +} + +static get_uncompressed_size_t _get_uncompressed_size[BLED_COMPRESSION_MAX] = { + get_uncompress_size_none, + get_uncompress_size_zip, + get_uncompress_size_none, // .Z has no decompressed size info + get_uncompress_size_gz, + get_uncompress_size_lzma, + get_uncompress_size_none, // .bz2 has no decompressed size info + get_uncompress_size_xz, + get_uncompress_size_7zip, + get_uncompress_size_vtsi, + get_uncompress_size_zstd, +}; + +/* Get the decompressed size of file 'fd', compressed using 'type' */ +int64_t get_uncompressed_size(int fd, int type) +{ + int64_t size = -1; + + if ((type < 0) || (type >= BLED_COMPRESSION_MAX)) { + bb_error_msg("Unsupported compression format"); + return -1; + } + size = _get_uncompressed_size[type](fd); + + /* Make sure to reset our file pointer */ + lseek(fd, 0, SEEK_SET); + return size; +} diff --git a/src/bled/decompress_bunzip2.c b/src/bled/decompress_bunzip2.c index 7cb08f93..9a08eb5c 100644 --- a/src/bled/decompress_bunzip2.c +++ b/src/bled/decompress_bunzip2.c @@ -768,7 +768,7 @@ unpack_bz2_stream(transformer_state_t *xstate) if (check_signature16(xstate, BZIP2_MAGIC)) return -1; - outbuf = xmalloc(IOBUF_SIZE); + outbuf = aligned_xmalloc(IOBUF_SIZE); if (outbuf == NULL) return -1; len = 0; @@ -834,7 +834,7 @@ unpack_bz2_stream(transformer_state_t *xstate) release_mem: dealloc_bunzip(bd); - free(outbuf); + aligned_free(outbuf); return i ? i : IF_DESKTOP(total_written) + 0; } diff --git a/src/bled/decompress_gunzip.c b/src/bled/decompress_gunzip.c index beb7fb39..c99b0dc1 100644 --- a/src/bled/decompress_gunzip.c +++ b/src/bled/decompress_gunzip.c @@ -1012,7 +1012,7 @@ inflate_unzip_internal(STATE_PARAM transformer_state_t *xstate) ssize_t nwrote; /* Allocate all global buffers (for DYN_ALLOC option) */ - gunzip_window = xzalloc(GUNZIP_WSIZE); + gunzip_window = aligned_xzalloc(GUNZIP_WSIZE); gunzip_outbuf_count = 0; gunzip_bytes_out = 0; gunzip_src_fd = xstate->src_fd; @@ -1068,7 +1068,7 @@ inflate_unzip_internal(STATE_PARAM transformer_state_t *xstate) } ret: /* Cleanup */ - free(gunzip_window); + aligned_free(gunzip_window); free(gunzip_crc_table); return n; } diff --git a/src/bled/decompress_uncompress.c b/src/bled/decompress_uncompress.c index a995a0db..28178cf7 100644 --- a/src/bled/decompress_uncompress.c +++ b/src/bled/decompress_uncompress.c @@ -104,7 +104,7 @@ unpack_Z_stream(transformer_state_t *xstate) return -1; inbuf = xzalloc(IBUFSIZ + 64); - outbuf = xzalloc(OBUFSIZ + 2048); + outbuf = aligned_xzalloc(OBUFSIZ + 2048); htab = xzalloc(HSIZE); /* wasn't zeroed out before, maybe can xmalloc? */ codetab = xzalloc(HSIZE * sizeof(codetab[0])); @@ -311,7 +311,7 @@ unpack_Z_stream(transformer_state_t *xstate) retval = IF_DESKTOP(total_written) + 0; err: free(inbuf); - free(outbuf); + aligned_free(outbuf); free(htab); free(codetab); return retval; diff --git a/src/bled/decompress_unlzma.c b/src/bled/decompress_unlzma.c index 856193cb..d79cb463 100644 --- a/src/bled/decompress_unlzma.c +++ b/src/bled/decompress_unlzma.c @@ -263,8 +263,8 @@ unpack_lzma_stream(transformer_state_t *xstate) if (header.dict_size == 0) header.dict_size++; - buffer_size = (uint32_t)MIN(header.dst_size, header.dict_size); - buffer = xmalloc(buffer_size); + buffer_size = (uint32_t)MAX(SECTOR_ALIGNMENT, MIN(header.dst_size, header.dict_size)); + buffer = aligned_xmalloc(buffer_size); { int num_probs; @@ -528,7 +528,7 @@ unpack_lzma_stream(transformer_state_t *xstate) } rc_free(rc); free(p); - free(buffer); + aligned_free(buffer); return total_written; } } diff --git a/src/bled/decompress_unxz.c b/src/bled/decompress_unxz.c index 731a77e4..45ff892c 100644 --- a/src/bled/decompress_unxz.c +++ b/src/bled/decompress_unxz.c @@ -49,7 +49,7 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_xz_stream(transformer_state_t *xstate bb_error_msg_and_err("memory allocation error"); in = xmalloc(XZ_BUFSIZE); - out = xmalloc(XZ_BUFSIZE); + out = aligned_xmalloc(XZ_BUFSIZE); b.in = in; b.in_pos = 0; @@ -129,7 +129,7 @@ out: err: xz_dec_end(s); free(in); - free(out); + aligned_free(out); if (ret == XZ_OK) return n; else if (ret == XZ_BUF_FULL) diff --git a/src/bled/decompress_unzip.c b/src/bled/decompress_unzip.c index ef8745a2..e0818128 100644 --- a/src/bled/decompress_unzip.c +++ b/src/bled/decompress_unzip.c @@ -399,7 +399,7 @@ static void unzip_set_xstate(transformer_state_t* xstate, zip_header_t* zip) zip64_t* zip64; /* Set the default sizes for non ZIP64 content */ - xstate->dst_size = zip->fmt.ucmpsize; + xstate->bytes_total = zip->fmt.ucmpsize; xstate->bytes_in = zip->fmt.cmpsize; /* Set the filename */ @@ -440,7 +440,7 @@ static void unzip_set_xstate(transformer_state_t* xstate, zip_header_t* zip) zip64->fmt.cmpsize, zip64->fmt.ucmpsize ); - xstate->dst_size = zip64->fmt.ucmpsize; + xstate->bytes_total = zip64->fmt.ucmpsize; xstate->bytes_in = zip64->fmt.cmpsize; } } @@ -457,10 +457,10 @@ unzip_extract(zip_header_t* zip, transformer_state_t* xstate) if (zip->fmt.method == 0) { /* Method 0 - stored (not compressed) */ - if (xstate->dst_size) { - bb_copyfd_exact_size(xstate->src_fd, xstate->dst_fd, xstate->dst_size); + if (xstate->bytes_total) { + bb_copyfd_exact_size(xstate->src_fd, xstate->dst_fd, xstate->bytes_total); } - return xstate->dst_size; + return xstate->bytes_total; } if (zip->fmt.method == 8) { @@ -507,7 +507,7 @@ unzip_extract(zip_header_t* zip, transformer_state_t* xstate) } /* Validate decompression - size */ - if (n != -ENOSPC && xstate->dst_size != xstate->bytes_out) { + if (n != -ENOSPC && xstate->bytes_total != xstate->bytes_out) { /* Don't die. Who knows, maybe len calculation * was botched somewhere. After all, crc matched! */ bb_simple_error_msg("bad length"); diff --git a/src/bled/decompress_unzstd.c b/src/bled/decompress_unzstd.c index 894ad5cb..85eaa474 100644 --- a/src/bled/decompress_unzstd.c +++ b/src/bled/decompress_unzstd.c @@ -27,8 +27,8 @@ unpack_zstd_stream_inner(transformer_state_t *xstate, ZSTD_DStream *dctx, void *out_buff) { const U32 zstd_magic = ZSTD_MAGIC; - const size_t in_allocsize = roundupsize(ZSTD_DStreamInSize(), 1024), - out_allocsize = roundupsize(ZSTD_DStreamOutSize(), 1024); + const size_t in_allocsize = roundupsize(ZSTD_DStreamInSize(), SECTOR_ALIGNMENT), + out_allocsize = roundupsize(ZSTD_DStreamOutSize(), SECTOR_ALIGNMENT); IF_DESKTOP(long long int total = 0;) size_t last_result = ZSTD_error_maxCode + 1; @@ -132,10 +132,10 @@ unpack_zstd_stream(transformer_state_t *xstate) bb_error_msg_and_die("memory exhausted"); } - out_buff = xmalloc(in_allocsize + out_allocsize); + out_buff = aligned_xmalloc(in_allocsize + out_allocsize); result = unpack_zstd_stream_inner(xstate, dctx, out_buff); - free(out_buff); + aligned_free(out_buff); ZSTD_freeDStream(dctx); return result; } diff --git a/src/bled/decompress_vtsi.c b/src/bled/decompress_vtsi.c index 70a2c269..612fca4a 100644 --- a/src/bled/decompress_vtsi.c +++ b/src/bled/decompress_vtsi.c @@ -62,7 +62,7 @@ typedef struct { extern int __static_assert__[sizeof(VTSI_FOOTER) == 512 ? 1 : -1]; -#define MAX_READ_BUF (8 * 1024 * 1024) +#define MAX_READ_BUF BB_BUFSIZE static int check_vtsi_footer(VTSI_FOOTER* footer) { @@ -140,13 +140,13 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_vtsi_stream(transformer_state_t* xsta goto err; if (xstate->mem_output_size_max == 512) - max_buflen = 1024; + max_buflen = SECTOR_ALIGNMENT; - segment = xmalloc(footer.segment_num * sizeof(VTSI_SEGMENT) + max_buflen); - if (!segment) + buf = aligned_xmalloc(max_buflen + footer.segment_num * sizeof(VTSI_SEGMENT)); + if (!buf) bb_error_msg_and_err("Failed to alloc segment buffer %u", footer.segment_num); - buf = (uint8_t*)segment + footer.segment_num * sizeof(VTSI_SEGMENT); + segment = (VTSI_SEGMENT*)&buf[max_buflen]; lseek(src_fd, footer.segment_offset, SEEK_SET); safe_read(src_fd, segment, footer.segment_num * sizeof(VTSI_SEGMENT)); @@ -182,8 +182,7 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_vtsi_stream(transformer_state_t* xsta n = tot; err: - if (segment) - free(segment); + aligned_free(buf); return n; } diff --git a/src/bled/libbb.h b/src/bled/libbb.h index eb799206..4bd4b6f7 100644 --- a/src/bled/libbb.h +++ b/src/bled/libbb.h @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -40,6 +41,7 @@ #include #define ONE_TB 1099511627776ULL +#define SECTOR_ALIGNMENT 4096 #define ENABLE_DESKTOP 1 #if ENABLE_DESKTOP @@ -124,6 +126,7 @@ extern jmp_buf bb_error_jmp; extern char* bb_virtual_buf; extern size_t bb_virtual_len, bb_virtual_pos; extern int bb_virtual_fd; +extern bool bb_progress_on_write; uint32_t* crc32_filltable(uint32_t *crc_table, int endian); uint32_t crc32_le(uint32_t crc, unsigned char const *p, size_t len, uint32_t *crc32table_le); @@ -152,7 +155,7 @@ struct timeval64 { }; extern void (*bled_printf) (const char* format, ...); -extern void (*bled_progress) (const uint64_t processed_bytes); +extern void (*bled_progress) (const int64_t processed_bytes); extern void (*bled_switch) (const char* filename, const uint64_t filesize); extern int (*bled_read)(int fd, void* buf, unsigned int count); extern int (*bled_write)(int fd, const void* buf, unsigned int count); @@ -191,8 +194,8 @@ static inline int fnmatch(const char *pattern, const char *string, int flags) { static inline pid_t wait(int* status) { *status = 4; return -1; } #define wait_any_nohang wait -/* This enables the display of a progress based on the number of bytes read */ -extern uint64_t bb_total_rb; +/* This enables the display of a progress based on the number of bytes read/written */ +extern uint64_t bb_total_rb, bb_total_wb; static inline int full_read(int fd, void *buf, unsigned int count) { int rb; @@ -223,23 +226,28 @@ static inline int full_read(int fd, void *buf, unsigned int count) { } else { rb = (bled_read != NULL) ? bled_read(fd, buf, count) : _read(fd, buf, count); } - if (rb > 0) { + if (bled_progress != NULL && !bb_progress_on_write && rb > 0) { bb_total_rb += rb; - if (bled_progress != NULL) - bled_progress(bb_total_rb); + bled_progress(bb_total_rb); } return rb; } static inline int full_write(int fd, const void* buffer, unsigned int count) { + int wb; /* None of our r/w buffers should be larger than BB_BUFSIZE */ if (count > BB_BUFSIZE) { errno = E2BIG; return -1; } - return (bled_write != NULL) ? bled_write(fd, buffer, count) : _write(fd, buffer, count); + wb = (bled_write != NULL) ? bled_write(fd, buffer, count) : _write(fd, buffer, count); + if (bled_progress != NULL && bb_progress_on_write && wb > 0) { + bb_total_wb += wb; + bled_progress(bb_total_wb); + } + return wb; } static inline void bb_copyfd_exact_size(int fd1, int fd2, off_t size) @@ -254,7 +262,7 @@ static inline void bb_copyfd_exact_size(int fd1, int fd2, off_t size) if (size > ONE_TB) bb_error_msg_and_die("too large"); - buf = malloc(BB_BUFSIZE); + buf = _mm_malloc(BB_BUFSIZE, SECTOR_ALIGNMENT); if (buf == NULL) bb_error_msg_and_die("out of memory"); @@ -262,7 +270,7 @@ static inline void bb_copyfd_exact_size(int fd1, int fd2, off_t size) int r, w; r = full_read(fd1, buf, (unsigned int)MIN(size - rb, BB_BUFSIZE)); if (r < 0) { - free(buf); + _mm_free(buf); bb_error_msg_and_die("read error"); } if (r == 0) { @@ -271,7 +279,7 @@ static inline void bb_copyfd_exact_size(int fd1, int fd2, off_t size) } w = full_write(fd2, buf, r); if (w < 0) { - free(buf); + _mm_free(buf); bb_error_msg_and_die("write error"); } if (w != r) { @@ -280,7 +288,7 @@ static inline void bb_copyfd_exact_size(int fd1, int fd2, off_t size) } rb += r; } - free(buf); + _mm_free(buf); } static inline struct tm *localtime_r(const time_t *timep, struct tm *result) { @@ -294,6 +302,9 @@ static inline struct tm *localtime_r(const time_t *timep, struct tm *result) { #define xmalloc malloc #define xzalloc(x) calloc(x, 1) #define malloc_or_warn malloc +#define aligned_xmalloc(x) _mm_malloc(x, SECTOR_ALIGNMENT); +static inline void* aligned_xzalloc(size_t x) { void* r = aligned_xmalloc(x); if (r) memset(r, 0, x); return r; } +#define aligned_free _mm_free #define mkdir(x, y) _mkdirU(x) struct fd_pair { int rd; int wr; }; void xpipe(int filedes[2]) FAST_FUNC; diff --git a/src/bled/xz_dec_stream.c b/src/bled/xz_dec_stream.c index b0184228..15c1a7be 100644 --- a/src/bled/xz_dec_stream.c +++ b/src/bled/xz_dec_stream.c @@ -368,7 +368,7 @@ static enum xz_ret XZ_FUNC crc32_validate(struct xz_dec *s, struct xz_buf *b) */ static bool XZ_FUNC check_skip(struct xz_dec *s, struct xz_buf *b) { - while (s->check_type < 16 && s->pos < check_sizes[s->check_type]) { + while (s->check_type >= 0 && s->check_type < 16 && s->pos < check_sizes[s->check_type]) { if (b->in_pos == b->in_size) return false; diff --git a/src/format.c b/src/format.c index 329cf3b3..c13f253c 100644 --- a/src/format.c +++ b/src/format.c @@ -1072,10 +1072,18 @@ BOOL WritePBR(HANDLE hLogicalVolume) return FALSE; } -static void update_progress(const uint64_t processed_bytes) +static void update_progress(const int64_t processed_bytes) { - UpdateProgressWithInfo(OP_FORMAT, MSG_261, processed_bytes, img_report.image_size); - uprint_progress(processed_bytes, img_report.image_size); + static uint64_t total_bytes; + + if (processed_bytes < 0) { + total_bytes = -processed_bytes; + UpdateProgressWithInfo(OP_FORMAT, MSG_261, 0, total_bytes); + uprint_progress(0, total_bytes); + } else { + UpdateProgressWithInfo(OP_FORMAT, MSG_261, processed_bytes, total_bytes); + uprint_progress(processed_bytes, total_bytes); + } } // Some compressed images use streams that aren't multiple of the sector @@ -1288,7 +1296,6 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive) if_assert_fails((uintptr_t)sec_buf% SelectedDrive.SectorSize == 0) goto out; sec_buf_pos = 0; - update_progress(0); bled_init(256 * KB, uprintf, NULL, sector_write, update_progress, NULL, &ErrorStatus); bled_ret = bled_uncompress_with_handles(hSourceImage, hPhysicalDrive, img_report.compression_type); bled_exit(); diff --git a/src/hash.c b/src/hash.c index 20a354bc..bd8272b9 100644 --- a/src/hash.c +++ b/src/hash.c @@ -1532,7 +1532,6 @@ BOOL HashFile(const unsigned type, const char* path, uint8_t* hash) HASH_CONTEXT hash_ctx = { {0} }; HANDLE h = INVALID_HANDLE_VALUE; DWORD rs = 0; - uint64_t rb; uint8_t buf[4096]; if ((type >= HASH_MAX) || (path == NULL) || (hash == NULL)) @@ -1546,7 +1545,7 @@ BOOL HashFile(const unsigned type, const char* path, uint8_t* hash) } hash_init[type](&hash_ctx); - for (rb = 0; ; rb += rs) { + while(1) { CHECK_FOR_USER_CANCEL; if (!ReadFile(h, buf, sizeof(buf), &rs, NULL)) { ErrorStatus = RUFUS_ERROR(ERROR_READ_FAULT); diff --git a/src/rufus.rc b/src/rufus.rc index ecac3ef6..e48cdf2c 100644 --- a/src/rufus.rc +++ b/src/rufus.rc @@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_DIALOG DIALOGEX 12, 12, 232, 326 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_ACCEPTFILES -CAPTION "Rufus 4.15.2391" +CAPTION "Rufus 4.15.2392" FONT 9, "Segoe UI Symbol", 400, 0, 0x0 BEGIN LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP @@ -409,8 +409,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,15,2391,0 - PRODUCTVERSION 4,15,2391,0 + FILEVERSION 4,15,2392,0 + PRODUCTVERSION 4,15,2392,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -428,13 +428,13 @@ BEGIN VALUE "Comments", "https://rufus.ie" VALUE "CompanyName", "Akeo Consulting" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "4.15.2391" + VALUE "FileVersion", "4.15.2392" VALUE "InternalName", "Rufus" VALUE "LegalCopyright", " 2011-2026 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" VALUE "OriginalFilename", "rufus-4.15.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "4.15.2391" + VALUE "ProductVersion", "4.15.2392" END END BLOCK "VarFileInfo" diff --git a/src/stdio.c b/src/stdio.c index c7861c65..cc13d283 100644 --- a/src/stdio.c +++ b/src/stdio.c @@ -967,9 +967,15 @@ static void print_extracted_file(const char* file_path, uint64_t file_length) PrintStatus(0, MSG_000, str); // MSG_000 is "%s" } -static void update_progress(const uint64_t processed_bytes) +static void update_progress(const int64_t processed_bytes) { - UpdateProgressWithInfo(OP_EXTRACT_ZIP, MSG_348, processed_bytes, archive_size); + static uint64_t total_bytes = 0; + + if (processed_bytes < 0) { + total_bytes = -processed_bytes; + UpdateProgressWithInfo(OP_EXTRACT_ZIP, MSG_348, 0, total_bytes); + } else + UpdateProgressWithInfo(OP_EXTRACT_ZIP, MSG_348, processed_bytes, total_bytes); } // Extract content from a zip archive onto the designated directory or drive diff --git a/src/stdlg.c b/src/stdlg.c index 51c132d2..74dc7efe 100644 --- a/src/stdlg.c +++ b/src/stdlg.c @@ -838,17 +838,17 @@ static int GetComboBoxMinWidth(HWND hCtrl, StrArray* array) return max_width + arrow_width + padding; } -static VOID ShowSilentOption(HWND hDlg, int s, BOOL show) +static VOID ShowSilentOption(HWND hDlg, int index, BOOL show) { int i, dh; RECT rc1, rc2; - ShowWindow(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1 + selection_data[s].options->edition_index - 1), show ? SW_SHOW : SW_HIDE); + ShowWindow(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1 + selection_data[index].options->edition_index - 1), show ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(hDlg, IDC_SELECTION_EDITION), show ? SW_SHOW : SW_HIDE); GetWindowRect(GetDlgItem(hDlg, IDC_SELECTION_CHOICE1), &rc1); GetWindowRect(GetDlgItem(hDlg, IDC_SELECTION_CHOICE2), &rc2); dh = show ? (rc2.top - rc1.top) : (rc1.top - rc2.top); - for (i = selection_data[s].options->edition_index; i < (int)selection_data[s].options->choices.Index; i++) + for (i = selection_data[index].options->edition_index; i < (int)selection_data[index].options->choices.Index; i++) ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SELECTION_CHOICE1 + i), 0, dh, 0, 0, 1.0f); ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDOK), 0, dh, 0, 0, 1.0f); ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDCANCEL), 0, dh, 0, 0, 1.0f); @@ -1055,7 +1055,6 @@ static INT_PTR CALLBACK SelectionCallback(HWND hDlg, UINT message, WPARAM wParam break; case WM_COMMAND: BOOL enable = TRUE; - BOOL silent_install_checked = FALSE; WORD command = LOWORD(wParam); if (command >= IDC_SELECTION_CHOICE1 && command < IDC_SELECTION_CHOICEMAX) { if (selection_data[s].options->flags & SELECTION_NEEDS_ALL_TO_PROCEED) { @@ -1417,12 +1416,11 @@ void DestroyTooltip(HWND hControl) void DestroyAllTooltips(void) { - int i, j; + int i; - for (i = 0, j = 0; i < MAX_TOOLTIPS; i++) { + for (i = 0; i < MAX_TOOLTIPS; i++) { if (ttlist[i].hTip == NULL) continue; - j++; DestroyWindow(ttlist[i].hTip); safe_free(ttlist[i].wstring); ttlist[i].original_proc = NULL; From 2350489fe902bdc71d37f255a7684fe06a0ab2d0 Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Fri, 19 Jun 2026 22:58:17 +0100 Subject: [PATCH 2/5] [uefi] update uefi-ntfs driver to latest and add RISC-V 64 support * The updated version fixes an error when trying to load the NTFS driver on x64. * Closes #2997. * Also add RISC-V 64 bootloader and NTFS/exFAT drivers since they might come handy. --- ChangeLog.txt | 2 ++ res/uefi/readme.txt | 4 ++-- res/uefi/uefi-ntfs.img | Bin 1048576 -> 1048576 bytes src/rufus.rc | 10 +++++----- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 3b37f441..37d86fbf 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,6 +1,8 @@ o Version 4.15 (2026.06.??) + Add RISC-V 64 support to UEFI:NTFS Improve the guards for using the "silent" option Improve the ability to cancel during write retries + Improve progress reporting for compressed image extraction Fix unrestricted XML entity expansion and integer overflow in ezxml parser (courtesy of Eric Sadowski) Fix "silent" Windows installation failing at 75% in most cases Fix a crash during boot when using UEFI:NTFS on Snapdragon X based ARM64 platforms diff --git a/res/uefi/readme.txt b/res/uefi/readme.txt index 7841927f..894f11c6 100644 --- a/res/uefi/readme.txt +++ b/res/uefi/readme.txt @@ -7,10 +7,10 @@ This image, which can be mounted as a FAT file system or opened in 7-zip, contains the following data: o Secure Boot signed NTFS UEFI drivers, derived from ntfs-3g [1]. - These drivers are the exact same as the read-only binaries from release 1.8, + These drivers are the exact same as the read-only binaries from release 1.9, except for the addition of Microsoft's Secure Boot signature. -o Non Secure Boot signed exFAT (and ARM NTFS) UEFI drivers from EfiFs [2]. +o Non Secure Boot signed exFAT (and ARM/RISC NTFS) UEFI drivers from EfiFs [2]. These drivers are the exact same as the binaries from EfiFs release 1.12 but, because they are licensed under GPLv3, cannot be Secure Boot signed. diff --git a/res/uefi/uefi-ntfs.img b/res/uefi/uefi-ntfs.img index 7c05fa330e8ca341e82cce76c00524212028ca15..ac50eed9730af847c43c145a5c17678f54128b33 100644 GIT binary patch delta 211655 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

3EwOmD*U~a@Af$GYYJ3` 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 P4KEn0ZzVfA%2xj`GXUyN delta 101279 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

Qc61pJg*$+g--G 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 Date: Sun, 21 Jun 2026 14:21:28 +0100 Subject: [PATCH 3/5] [cmp] update Bled to latest and get projected size for compressed disk images * The latest Bled, when compiled with the BLED_EXPECT_DISK_IMAGE option, allows us to get the size of the decompressed disk image, even for compression formats that do not report the decompressed size natively, so use that. --- .vs/bled.vcxproj | 12 ++++---- src/bled/Makefile.am | 2 +- src/bled/Makefile.in | 2 +- src/bled/bb_archive.h | 3 ++ src/bled/bled.c | 31 +++++++++++++++++-- src/bled/bled_size.c | 69 +++++++++++++++++++++++++++++++++++++------ src/rufus.c | 5 +++- src/rufus.rc | 10 +++---- src/vhd.c | 3 ++ 9 files changed, 111 insertions(+), 26 deletions(-) diff --git a/.vs/bled.vcxproj b/.vs/bled.vcxproj index f4b7c146..de587bfb 100644 --- a/.vs/bled.vcxproj +++ b/.vs/bled.vcxproj @@ -162,7 +162,7 @@ Level3 ProgramDatabase Disabled - _OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions) + BLED_EXPECT_DISK_IMAGE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions) MultiThreadedDebug ..\src CompileAsC @@ -181,7 +181,7 @@ Level3 ProgramDatabase Disabled - _OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions) + BLED_EXPECT_DISK_IMAGE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions) MultiThreadedDebug ..\src /utf-8 %(AdditionalOptions) @@ -200,7 +200,7 @@ ProgramDatabase EnableFastChecks Disabled - _OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions) + BLED_EXPECT_DISK_IMAGE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions) MultiThreadedDebug ..\src CompileAsC @@ -217,7 +217,7 @@ Level3 - _OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;%(PreprocessorDefinitions) + BLED_EXPECT_DISK_IMAGE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;%(PreprocessorDefinitions) MultiThreaded ..\src CompileAsC @@ -238,7 +238,7 @@ Level3 true - _OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;%(PreprocessorDefinitions) + BLED_EXPECT_DISK_IMAGE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;%(PreprocessorDefinitions) MultiThreaded ..\src /utf-8 %(AdditionalOptions) @@ -257,7 +257,7 @@ Level3 - _OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;%(PreprocessorDefinitions) + BLED_EXPECT_DISK_IMAGE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;%(PreprocessorDefinitions) MultiThreaded ..\src CompileAsC diff --git a/src/bled/Makefile.am b/src/bled/Makefile.am index 3e059834..3827cc51 100644 --- a/src/bled/Makefile.am +++ b/src/bled/Makefile.am @@ -7,4 +7,4 @@ libbled_a_SOURCES = bled.c bled_size.c crc32.c data_align.c data_extract_all.c d init_handle.c open_transformer.c seek_by_jump.c seek_by_read.c xz_dec_bcj.c xz_dec_lzma2.c xz_dec_stream.c \ xxhash.c zstd_common.c zstd_decompress.c zstd_decompress_block.c zstd_ddict.c zstd_entropy_common.c \ zstd_error_private.c -libbled_a_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/.. -Wno-undef -Wno-strict-aliasing +libbled_a_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/.. -DBLED_EXPECT_DISK_IMAGE -Wno-undef -Wno-strict-aliasing diff --git a/src/bled/Makefile.in b/src/bled/Makefile.in index 1a59d13a..f0a4c484 100644 --- a/src/bled/Makefile.in +++ b/src/bled/Makefile.in @@ -285,7 +285,7 @@ libbled_a_SOURCES = bled.c bled_size.c crc32.c data_align.c data_extract_all.c d xxhash.c zstd_common.c zstd_decompress.c zstd_decompress_block.c zstd_ddict.c zstd_entropy_common.c \ zstd_error_private.c -libbled_a_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/.. -Wno-undef -Wno-strict-aliasing +libbled_a_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/.. -DBLED_EXPECT_DISK_IMAGE -Wno-undef -Wno-strict-aliasing all: all-am .SUFFIXES: diff --git a/src/bled/bb_archive.h b/src/bled/bb_archive.h index 284bbffb..2e8a6ff6 100644 --- a/src/bled/bb_archive.h +++ b/src/bled/bb_archive.h @@ -254,6 +254,9 @@ typedef struct transformer_state_t { } magic; } transformer_state_t; +typedef int64_t(*unpacker_t)(transformer_state_t* xstate); +typedef int64_t(*get_uncompressed_size_t)(int fd); +int64_t get_uncompressed_size(int fd, int type); void init_transformer_state(transformer_state_t *xstate) FAST_FUNC; ssize_t transformer_write(transformer_state_t *xstate, const void *buf, size_t bufsize) FAST_FUNC; ssize_t xtransformer_write(transformer_state_t *xstate, const void *buf, size_t bufsize) FAST_FUNC; diff --git a/src/bled/bled.c b/src/bled/bled.c index 37331b43..c421cab5 100644 --- a/src/bled/bled.c +++ b/src/bled/bled.c @@ -15,9 +15,6 @@ #include "bb_archive.h" #include "bled.h" -typedef int64_t(*unpacker_t)(transformer_state_t *xstate); -extern int64_t get_uncompressed_size(int fd, int type); - /* Globals */ smallint bb_got_signal; uint64_t bb_total_rb, bb_total_wb; @@ -303,6 +300,34 @@ int64_t bled_uncompress_from_buffer_to_buffer(const char* src, const size_t src_ return ret; } +/* Get the decompressed size of file 'src', compressed using 'type' */ +int64_t bled_get_uncompressed_size(const char* src, int type) +{ + int fd = -1; + int64_t ret = -1; + + if (!bled_initialized) { + bb_error_msg("The library has not been initialized"); + return -1; + } + + if ((type < 0) || (type >= BLED_COMPRESSION_MAX)) { + bb_error_msg("Unsupported compression format"); + goto err; + } + + fd = _openU(src, _O_RDONLY | _O_BINARY, 0); + if (fd < 0) + return -1; + + ret = get_uncompressed_size(fd, type); + +err: + if (fd > 0) + _close(fd); + return ret; +} + /* Initialize the library. * When the parameters are not NULL or zero you can: * - specify the buffer size to use (must be larger than 256KB and a power of two) diff --git a/src/bled/bled_size.c b/src/bled/bled_size.c index ee5a9736..403c3e2b 100644 --- a/src/bled/bled_size.c +++ b/src/bled/bled_size.c @@ -15,8 +15,6 @@ #include "bb_archive.h" #include "bled.h" -typedef int64_t(*get_uncompressed_size_t)(int fd); - /* ------------------------------------------------------------------------- * Internal helpers * ---------------------------------------------------------------------- */ @@ -702,6 +700,61 @@ static int64_t get_uncompress_size_zstd(int fd) return (int64_t)size; } +#if defined(BLED_EXPECT_DISK_IMAGE) +extern progress_t bled_progress; +extern unpacker_t unpacker[BLED_COMPRESSION_MAX]; +int64_t get_uncompressed_size_from_disk_image(int fd, int type) +{ + progress_t old_bled_progress = bled_progress; + int64_t size = DECOMP_SIZE_UNKNOWN; + uint8_t buf[8192]; + transformer_state_t xstate; + + bled_progress = NULL; /* Can't have progress on this operation */ + init_transformer_state(&xstate); + xstate.src_fd = fd; + xstate.dst_fd = -1; + xstate.mem_output_buf = buf; + xstate.mem_output_size = 0; + xstate.mem_output_size_max = sizeof(buf); + + if (setjmp(bb_error_jmp)) + goto out; + + lseek(fd, 0, SEEK_SET); + size = unpacker[type](&xstate); + if (size != sizeof(buf) || buf[0x1fe] != 0x55 || buf[0x1ff] != 0xaa) { + size = DECOMP_SIZE_UNKNOWN; + goto out; + } + if (buf[0x1c2] == 0xee) { + /* Protective EFI MBR => look for the primary GPT, which'll also give us the sector size */ + if (memcmp("EFI PART", &buf[0x200], 8) == 0) { + /* The address of the backup GPT is assumed to be the last LBA for the disk */ + size = get_le64(&buf[0x220]) * 512; + goto out; + } + if (memcmp("EFI PART", &buf[0x1000], 8) == 0) { + size = get_le64(&buf[0x1020]) * 8192; + goto out; + } + } + if (buf[0x1be] == 0x80) { + /* Regular bootable MBR => compute the max LBA (using primary partitions only) */ + uint32_t max_lba = 1; + for (int i = 0; i < 4; i++) + max_lba = MAX(max_lba, get_le32(&buf[0x1be + 0x10 * i + 8]) + get_le32(&buf[0x1be + 0x10 * i + 0xc])); + size = max_lba * 512; /* assume 512-byte sectors for anything MBR based */ + if (size < 8192) + size = DECOMP_SIZE_UNKNOWN; + } + +out: + bled_progress = old_bled_progress; + return size; +} +#endif + static get_uncompressed_size_t _get_uncompressed_size[BLED_COMPRESSION_MAX] = { get_uncompress_size_none, get_uncompress_size_zip, @@ -718,13 +771,11 @@ static get_uncompressed_size_t _get_uncompressed_size[BLED_COMPRESSION_MAX] = { /* Get the decompressed size of file 'fd', compressed using 'type' */ int64_t get_uncompressed_size(int fd, int type) { - int64_t size = -1; - - if ((type < 0) || (type >= BLED_COMPRESSION_MAX)) { - bb_error_msg("Unsupported compression format"); - return -1; - } - size = _get_uncompressed_size[type](fd); + int64_t size = _get_uncompressed_size[type](fd); +#if defined(BLED_EXPECT_DISK_IMAGE) + if (size < 0) + size = get_uncompressed_size_from_disk_image(fd, type); +#endif /* Make sure to reset our file pointer */ lseek(fd, 0, SEEK_SET); diff --git a/src/rufus.c b/src/rufus.c index 09e34c45..4a92d6a0 100755 --- a/src/rufus.c +++ b/src/rufus.c @@ -1391,6 +1391,8 @@ DWORD WINAPI ImageScanThread(LPVOID param) (img_report.compression_type != BLED_COMPRESSION_NONE && img_report.compression_type < BLED_COMPRESSION_MAX) ? "compressed " : "", img_report.is_vhd ? "VHD" : "disk"); selection_default = BT_IMAGE; + if (img_report.projected_size > 0) + uprintf(" Size: %s (Projected)", SizeToHumanReadable(img_report.projected_size, FALSE, FALSE)); } if (img_report.is_iso) { @@ -1525,7 +1527,8 @@ static DWORD WINAPI BootCheckThread(LPVOID param) Notification(MB_OK | MB_ICONERROR, lmprintf(MSG_358), lmprintf(MSG_359)); goto out; } - if ((size_check) && (img_report.projected_size > (uint64_t)SelectedDrive.DiskSize)) { + /* Add 4 KB extra margin for VHD footers and so on */ + if ((size_check) && (img_report.projected_size > (uint64_t)SelectedDrive.DiskSize) + 4 * KB) { // This ISO image is too big for the selected target Notification(MB_OK | MB_ICONERROR, lmprintf(MSG_088), lmprintf(MSG_089)); goto out; diff --git a/src/rufus.rc b/src/rufus.rc index e388f48f..a4631124 100644 --- a/src/rufus.rc +++ b/src/rufus.rc @@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_DIALOG DIALOGEX 12, 12, 232, 326 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_ACCEPTFILES -CAPTION "Rufus 4.15.2393" +CAPTION "Rufus 4.15.2394" FONT 9, "Segoe UI Symbol", 400, 0, 0x0 BEGIN LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP @@ -409,8 +409,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,15,2393,0 - PRODUCTVERSION 4,15,2393,0 + FILEVERSION 4,15,2394,0 + PRODUCTVERSION 4,15,2394,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -428,13 +428,13 @@ BEGIN VALUE "Comments", "https://rufus.ie" VALUE "CompanyName", "Akeo Consulting" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "4.15.2393" + VALUE "FileVersion", "4.15.2394" VALUE "InternalName", "Rufus" VALUE "LegalCopyright", " 2011-2026 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" VALUE "OriginalFilename", "rufus-4.15.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "4.15.2393" + VALUE "ProductVersion", "4.15.2394" END END BLOCK "VarFileInfo" diff --git a/src/vhd.c b/src/vhd.c index d0faa1f5..7444ee17 100644 --- a/src/vhd.c +++ b/src/vhd.c @@ -99,6 +99,9 @@ static int8_t IsCompressedBootableImage(const char* path) ErrorStatus = 0; if (img_report.compression_type < BLED_COMPRESSION_MAX) { bled_init(0, uprintf, NULL, NULL, NULL, NULL, &ErrorStatus); + dc = bled_get_uncompressed_size(path, file_assoc[i].type); + if (dc > 0) + img_report.projected_size = dc; dc = bled_uncompress_to_buffer(path, (char*)buf, MBR_SIZE, file_assoc[i].type); bled_exit(); } else if (img_report.compression_type == BLED_COMPRESSION_MAX) { From eedeaea75ff103b2df0f306ed972244abaf46b58 Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Mon, 22 Jun 2026 18:15:06 +0100 Subject: [PATCH 4/5] [misc] fix multiple small issues * Use the actual Bled latest to fix a potential crash in ZSTD decompression as well as wrong disk size computation. * Fix wrong parenthesis placement for projected vs actual disk size check. * Update GitHub Actions to latest. Closes #3000. --- .github/workflows/codeql.yml | 2 +- .github/workflows/coverity.yml | 2 +- .github/workflows/mingw.yml | 2 +- .github/workflows/setup.yml | 2 +- .github/workflows/vs2026.yml | 2 +- src/bled/bled_size.c | 29 ++++++++++++++--------------- src/bled/decompress_unzstd.c | 4 ++-- src/rufus.c | 2 +- src/rufus.rc | 10 +++++----- 9 files changed, 27 insertions(+), 28 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 132541b4..1d45057d 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -41,7 +41,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Initialize CodeQL uses: github/codeql-action/init@v4 diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index fa324ed3..bbee991e 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 submodules: recursive diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml index 8e1df007..d59adfd5 100644 --- a/.github/workflows/mingw.yml +++ b/.github/workflows/mingw.yml @@ -54,7 +54,7 @@ jobs: upx - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 submodules: recursive diff --git a/.github/workflows/setup.yml b/.github/workflows/setup.yml index 0ff81dc5..c0fc073a 100644 --- a/.github/workflows/setup.yml +++ b/.github/workflows/setup.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: Add MSBuild to PATH uses: microsoft/setup-msbuild@v3 diff --git a/.github/workflows/vs2026.yml b/.github/workflows/vs2026.yml index 2c368afb..371f4d5a 100644 --- a/.github/workflows/vs2026.yml +++ b/.github/workflows/vs2026.yml @@ -40,7 +40,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@v7 with: fetch-depth: 0 submodules: recursive diff --git a/src/bled/bled_size.c b/src/bled/bled_size.c index 403c3e2b..4c9dda1a 100644 --- a/src/bled/bled_size.c +++ b/src/bled/bled_size.c @@ -727,25 +727,24 @@ int64_t get_uncompressed_size_from_disk_image(int fd, int type) size = DECOMP_SIZE_UNKNOWN; goto out; } - if (buf[0x1c2] == 0xee) { - /* Protective EFI MBR => look for the primary GPT, which'll also give us the sector size */ - if (memcmp("EFI PART", &buf[0x200], 8) == 0) { - /* The address of the backup GPT is assumed to be the last LBA for the disk */ - size = get_le64(&buf[0x220]) * 512; - goto out; - } - if (memcmp("EFI PART", &buf[0x1000], 8) == 0) { - size = get_le64(&buf[0x1020]) * 8192; - goto out; - } - } - if (buf[0x1be] == 0x80) { + if (buf[0x1be] == 0x00 && buf[0x1c2] == 0xee) { + /* + * Protective EFI MBR => look for the primary GPT, which'll also give us the sector size + * The address of the backup GPT is assumed to be the last LBA for the disk + */ + if (memcmp("EFI PART", &buf[0x200], 8) == 0) + size = (get_le64(&buf[0x220]) + 1) * 512; + else if (memcmp("EFI PART", &buf[0x1000], 8) == 0) + size = (get_le64(&buf[0x1020]) + 1) * 4096; + else + bb_error_msg("Could not locate primary GPT"); + } else if (buf[0x1be] == 0x80) { /* Regular bootable MBR => compute the max LBA (using primary partitions only) */ uint32_t max_lba = 1; for (int i = 0; i < 4; i++) max_lba = MAX(max_lba, get_le32(&buf[0x1be + 0x10 * i + 8]) + get_le32(&buf[0x1be + 0x10 * i + 0xc])); - size = max_lba * 512; /* assume 512-byte sectors for anything MBR based */ - if (size < 8192) + size = (max_lba + 1) * 512; /* assume 512-byte sectors for anything MBR based */ + if (size < 4096) size = DECOMP_SIZE_UNKNOWN; } diff --git a/src/bled/decompress_unzstd.c b/src/bled/decompress_unzstd.c index 85eaa474..4c6cdee7 100644 --- a/src/bled/decompress_unzstd.c +++ b/src/bled/decompress_unzstd.c @@ -119,8 +119,8 @@ unpack_zstd_stream_inner(transformer_state_t *xstate, IF_DESKTOP(long long) int FAST_FUNC unpack_zstd_stream(transformer_state_t *xstate) { - const size_t in_allocsize = roundupsize(ZSTD_DStreamInSize(), 1024), - out_allocsize = roundupsize(ZSTD_DStreamOutSize(), 1024); + const size_t in_allocsize = roundupsize(ZSTD_DStreamInSize(), SECTOR_ALIGNMENT), + out_allocsize = roundupsize(ZSTD_DStreamOutSize(), SECTOR_ALIGNMENT); IF_DESKTOP(long long) int result; void *out_buff; diff --git a/src/rufus.c b/src/rufus.c index 4a92d6a0..83803ce3 100755 --- a/src/rufus.c +++ b/src/rufus.c @@ -1528,7 +1528,7 @@ static DWORD WINAPI BootCheckThread(LPVOID param) goto out; } /* Add 4 KB extra margin for VHD footers and so on */ - if ((size_check) && (img_report.projected_size > (uint64_t)SelectedDrive.DiskSize) + 4 * KB) { + if ((size_check) && (img_report.projected_size > ((uint64_t)SelectedDrive.DiskSize + 4 * KB))) { // This ISO image is too big for the selected target Notification(MB_OK | MB_ICONERROR, lmprintf(MSG_088), lmprintf(MSG_089)); goto out; diff --git a/src/rufus.rc b/src/rufus.rc index a4631124..b15b9e7a 100644 --- a/src/rufus.rc +++ b/src/rufus.rc @@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_DIALOG DIALOGEX 12, 12, 232, 326 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_ACCEPTFILES -CAPTION "Rufus 4.15.2394" +CAPTION "Rufus 4.15.2395" FONT 9, "Segoe UI Symbol", 400, 0, 0x0 BEGIN LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP @@ -409,8 +409,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,15,2394,0 - PRODUCTVERSION 4,15,2394,0 + FILEVERSION 4,15,2395,0 + PRODUCTVERSION 4,15,2395,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -428,13 +428,13 @@ BEGIN VALUE "Comments", "https://rufus.ie" VALUE "CompanyName", "Akeo Consulting" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "4.15.2394" + VALUE "FileVersion", "4.15.2395" VALUE "InternalName", "Rufus" VALUE "LegalCopyright", " 2011-2026 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" VALUE "OriginalFilename", "rufus-4.15.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "4.15.2394" + VALUE "ProductVersion", "4.15.2395" END END BLOCK "VarFileInfo" From 6d8fbf98305ff37eb531c45cbd6ff44563c53917 Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Tue, 30 Jun 2026 11:58:42 +0100 Subject: [PATCH 5/5] Rufus 4.15 (Build 2396) * Add SquashFS file system detection and update files DB to latest. --- ChangeLog.txt | 6 +++--- res/appstore/listing/listing.csv | 26 ++++++++++++-------------- src/db.h | 1 + src/drive.c | 6 +++++- src/rufus.rc | 10 +++++----- 5 files changed, 26 insertions(+), 23 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 37d86fbf..caa86595 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,12 +1,12 @@ -o Version 4.15 (2026.06.??) +o Version 4.15 (2026.06.30) Add RISC-V 64 support to UEFI:NTFS - Improve the guards for using the "silent" option + Improve the guards for using the "silent" Windows installation option Improve the ability to cancel during write retries Improve progress reporting for compressed image extraction Fix unrestricted XML entity expansion and integer overflow in ezxml parser (courtesy of Eric Sadowski) Fix "silent" Windows installation failing at 75% in most cases Fix a crash during boot when using UEFI:NTFS on Snapdragon X based ARM64 platforms - Fix the first WUE option always being checked by default + Fix first WUE option always being checked by default Fix an infinite loop when using Windows ISOs that contain multiple WIMs Fix "Enable runtime UEFI media validation" checkbox not always being properly enabled Other WUE improvements/fixes for OneDrive removal and username validation (with thanks to @christian8641) diff --git a/res/appstore/listing/listing.csv b/res/appstore/listing/listing.csv index 2880ae7f..dbc1c806 100644 --- a/res/appstore/listing/listing.csv +++ b/res/appstore/listing/listing.csv @@ -65,7 +65,7 @@ • Pakeitimų žurnalas: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt","Rufus adalah utiliti yang membantu memformat dan mencipta pemacu kilat USB boot, seperti pemacu pen/kekunci USB, kayu memori, dan lain-lain. • Laman rasmi: https://rufus.ie • Kod Sumber: https://github.com/pbatard/rufus -• ChangeLog: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt","Rufus er et verktøy som hjelper til med å formatere og lage oppstartbare USB-stasjoner, for eksempel USB-minnepinner, USB-harddisker, og lignende. +• Log Perubahan: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt","Rufus er et verktøy som hjelper til med å formatere og lage oppstartbare USB-stasjoner, for eksempel USB-minnepinner, USB-harddisker, og lignende. • Offisiell webside: https://rufus.ie • Kildekode: https://github.com/pbatard/rufus • Endringslogg: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt","Rufus ابزاری است که به فرمت و ایجاد درایوهای فلش USB قابل بوت، مانند کلیدهای USB/pendrives، مموری استیک ها و غیره به شما کمک می کند. @@ -114,19 +114,17 @@ • Trang web chính thức: https://rufus.ie • Mã nguồn: https://github.com/pbatard/rufus • Nhật ký thay đổi: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt" -"ReleaseNotes","3","Text","• Windows User Experience improvements: -• - Add a ""Quality of Life"" option, to disable Teams, Outlook, Copilot and other Microsoft forced nuisances -• - Add a Silent installation option, that automatically, and WITHOUT PROMPT, installs Windows on the first detected disk -• - Add an option to copy 'SkuSiPolicy.p7b' to the ESP on installation (please refer to KB5042562 for more info) -• - Add tooltips for all the dialog options -• Add limited support for El-Torito UEFI image extraction (Mostly for Dell BIOS update ISOs) -• Improve error report when the user tries to use an image that resides on the target drive -• Improve the UEFI:NTFS partition label to make the install media more explicit during Windows Setup disk partitioning -• Improve support for Bazzite and other Fedora derivatives that don't follow EFI conventions -• Improve detection and exclusion of the new Bitdefender hidden VHDs -• Improve reporting of GRUB and Isolinux MBRs -• Fix potential errors during creation of Windows To Go media, due to the use of new versions of bcdboot -• Fix errors with local accounts that start or end with whitespaces",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +"ReleaseNotes","3","Text","• Add RISC-V 64 support to UEFI:NTFS +• Improve the guards for using the ""silent"" Windows installation option +• Improve the ability to cancel during write retries +• Improve progress reporting for compressed image extraction +• Fix unrestricted XML entity expansion and integer overflow in ezxml parser (courtesy of Eric Sadowski) +• Fix ""silent"" Windows installation failing at 75% in most cases +• Fix a crash during boot when using UEFI:NTFS on Snapdragon X based ARM64 platforms +• Fix first WUE option always being checked by default +• Fix an infinite loop when using Windows ISOs that contain multiple WIMs +• Fix ""Enable runtime UEFI media validation"" checkbox not always being properly enabled +• Other WUE improvements/fixes for OneDrive removal and username validation (with thanks to @christian8641)",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, "Title","4","Text","Rufus",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, "ShortTitle","5","Text","",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, "SortTitle","6","Text","",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/src/db.h b/src/db.h index c3197e9f..c4982b45 100644 --- a/src/db.h +++ b/src/db.h @@ -84,6 +84,7 @@ static uint8_t sha256db[] = { 0x82, 0x11, 0xfa, 0xe8, 0xaf, 0xf0, 0x23, 0x3f, 0x05, 0xa8, 0xb7, 0x8c, 0x58, 0x15, 0x25, 0xe2, 0x81, 0xac, 0x98, 0x23, 0x54, 0xa8, 0xc4, 0x3b, 0xb4, 0x96, 0x5e, 0x61, 0xdc, 0x98, 0xb4, 0x62, // syslinux-6.03/pre8/ldlinux.bss 0x83, 0x57, 0xaa, 0xd3, 0x6a, 0xec, 0x68, 0x21, 0xcb, 0xf2, 0x17, 0x4d, 0xb5, 0xd2, 0x09, 0xef, 0x2c, 0xd2, 0x62, 0x88, 0x12, 0x39, 0xeb, 0xc3, 0xf4, 0xc1, 0xcf, 0x55, 0xab, 0x10, 0xee, 0x55, // grub-2.12~rc1/core.img 0x83, 0x9b, 0xd0, 0x8a, 0xcb, 0x68, 0x47, 0xd6, 0x55, 0x07, 0xf1, 0x4e, 0x7a, 0x55, 0x6e, 0x91, 0xe6, 0x12, 0x9c, 0x47, 0x86, 0x3f, 0x7d, 0x61, 0xe2, 0xce, 0x6d, 0xb7, 0x8d, 0xf3, 0xd2, 0x3f, // syslinux-6.03/pre9/ldlinux.bss + 0x84, 0x73, 0x50, 0x4a, 0x84, 0x9c, 0x89, 0x83, 0x29, 0xcb, 0x90, 0x92, 0xf2, 0x5e, 0x26, 0x9d, 0x4e, 0x19, 0x3b, 0xc7, 0x72, 0xf8, 0x48, 0x9f, 0xa2, 0xc5, 0xd5, 0xa5, 0xd2, 0xd8, 0x87, 0x74, // grub-2.12-nonstandard-gdie/core.img 0x87, 0xaa, 0x91, 0xf8, 0x7f, 0xba, 0x5f, 0x31, 0x79, 0x43, 0x08, 0xda, 0xa4, 0xa4, 0x8d, 0xad, 0x6c, 0xf6, 0xfa, 0x34, 0x26, 0x4d, 0x66, 0xb8, 0x84, 0xb8, 0xb9, 0xdc, 0x96, 0x42, 0xed, 0x86, // syslinux-5.02/ldlinux.sys 0x88, 0x14, 0xe5, 0x76, 0xab, 0xc1, 0xaa, 0x44, 0xdd, 0xe9, 0x43, 0xb0, 0xca, 0xae, 0xe8, 0x33, 0xa5, 0x81, 0x01, 0x42, 0x61, 0x4a, 0xde, 0xeb, 0x4c, 0xc7, 0x25, 0xe7, 0x8a, 0x50, 0x45, 0xb7, // syslinux-6.03/ldlinux.bss 0x8b, 0x93, 0x7e, 0x5e, 0x8b, 0xae, 0x5a, 0xf8, 0xc8, 0x95, 0x63, 0xc0, 0x0e, 0x9c, 0xaf, 0xc6, 0xcd, 0x7c, 0x2c, 0x80, 0x8a, 0xda, 0x7b, 0xf4, 0xad, 0x51, 0x08, 0xda, 0x3e, 0x51, 0xcd, 0x70, // grub-2.00-22/core.img diff --git a/src/drive.c b/src/drive.c index 0b9a27eb..5c660348 100644 --- a/src/drive.c +++ b/src/drive.c @@ -1765,11 +1765,15 @@ const char* GetFsName(HANDLE hPhysical, LARGE_INTEGER StartingOffset) if (buf == NULL) goto out; - // 1. Try to detect ISO9660/FAT/exFAT/NTFS/ReFS through the 512 bytes superblock at offset 0 + // 1. Try to detect ISO9660/FAT/exFAT/NTFS/ReFS/SquashFS through the 512 bytes superblock at offset 0 if (!SetFilePointerEx(hPhysical, StartingOffset, NULL, FILE_BEGIN)) goto out; if (!ReadFile(hPhysical, buf, sector_size, &size, NULL) || size != sector_size) goto out; + if (memcmp("hsqs", buf, 4) == 0) { + ret = "SquashFS"; + goto out; + } if (strncmp("CD001", &buf[0x01], 5) == 0) { ret = "ISO9660"; goto out; diff --git a/src/rufus.rc b/src/rufus.rc index b15b9e7a..abdf1754 100644 --- a/src/rufus.rc +++ b/src/rufus.rc @@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_DIALOG DIALOGEX 12, 12, 232, 326 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_ACCEPTFILES -CAPTION "Rufus 4.15.2395" +CAPTION "Rufus 4.15.2396" FONT 9, "Segoe UI Symbol", 400, 0, 0x0 BEGIN LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP @@ -409,8 +409,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,15,2395,0 - PRODUCTVERSION 4,15,2395,0 + FILEVERSION 4,15,2396,0 + PRODUCTVERSION 4,15,2396,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -428,13 +428,13 @@ BEGIN VALUE "Comments", "https://rufus.ie" VALUE "CompanyName", "Akeo Consulting" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "4.15.2395" + VALUE "FileVersion", "4.15.2396" VALUE "InternalName", "Rufus" VALUE "LegalCopyright", " 2011-2026 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" VALUE "OriginalFilename", "rufus-4.15.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "4.15.2395" + VALUE "ProductVersion", "4.15.2396" END END BLOCK "VarFileInfo"