Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package exfatprogs for openSUSE:Factory checked in at 2026-06-16 13:46:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/exfatprogs (Old) and /work/SRC/openSUSE:Factory/.exfatprogs.new.1981 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "exfatprogs" Tue Jun 16 13:46:07 2026 rev:25 rq:1359352 version:1.4.2 Changes: -------- --- /work/SRC/openSUSE:Factory/exfatprogs/exfatprogs.changes 2026-06-02 16:01:16.483353768 +0200 +++ /work/SRC/openSUSE:Factory/.exfatprogs.new.1981/exfatprogs.changes 2026-06-16 13:46:59.421110250 +0200 @@ -1,0 +2,10 @@ +Mon Jun 15 05:21:03 UTC 2026 - Michael Vetter <[email protected]> + +- Update to 1.4.2: + Changes: + * exfatprogs: install lsdosattr and chdosattr in /bin instead of + /sbin. + Bug fixes: + * dump.exfat: prevent heap buffer overflow in name parsing. + +------------------------------------------------------------------- Old: ---- 1.4.1.tar.gz New: ---- 1.4.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ exfatprogs.spec ++++++ --- /var/tmp/diff_new_pack.rtzMit/_old 2026-06-16 13:47:01.881213116 +0200 +++ /var/tmp/diff_new_pack.rtzMit/_new 2026-06-16 13:47:01.893213617 +0200 @@ -17,7 +17,7 @@ Name: exfatprogs -Version: 1.4.1 +Version: 1.4.2 Release: 0 Summary: Utilities for exFAT file system maintenance License: GPL-2.0-or-later @@ -78,6 +78,6 @@ %{_sbindir}/mkfs.exfat %{_sbindir}/tune.exfat %{_sbindir}/exfat2img -%{_sbindir}/chdosattr -%{_sbindir}/lsdosattr +%{_bindir}/chdosattr +%{_bindir}/lsdosattr ++++++ 1.4.1.tar.gz -> 1.4.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/exfatprogs-1.4.1/.github/workflows/c-cpp.yml new/exfatprogs-1.4.2/.github/workflows/c-cpp.yml --- old/exfatprogs-1.4.1/.github/workflows/c-cpp.yml 2026-05-28 01:59:45.000000000 +0200 +++ new/exfatprogs-1.4.2/.github/workflows/c-cpp.yml 2026-06-15 02:56:33.000000000 +0200 @@ -3,12 +3,20 @@ on: push: branches: - - master - - exfat-next + - master + - exfat-next + paths-ignore: + - 'manpages/**' + - '**.md' + - '**.txt' + - '.editorconfig' + - '.gitignore' + - 'COPYING' + - 'NEWS' pull_request: branches: - - master - - exfat-next + - master + - exfat-next env: TEST_PART_TYPES: mbr gpt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/exfatprogs-1.4.1/.github/workflows/container-buildtests.yml new/exfatprogs-1.4.2/.github/workflows/container-buildtests.yml --- old/exfatprogs-1.4.1/.github/workflows/container-buildtests.yml 2026-05-28 01:59:45.000000000 +0200 +++ new/exfatprogs-1.4.2/.github/workflows/container-buildtests.yml 2026-06-15 02:56:33.000000000 +0200 @@ -5,6 +5,14 @@ branches: - master - exfat-next + paths-ignore: + - 'manpages/**' + - '**.md' + - '**.txt' + - '.editorconfig' + - '.gitignore' + - 'COPYING' + - 'NEWS' pull_request: branches: - master @@ -24,6 +32,8 @@ util-linux-dev - name: Autoconf and Configure run: ./autogen.sh && ./configure + - name: Distcheck + run: make -j "$(nproc)" distcheck - name: Build run: make -j$((`nproc`+1)) - name: Install @@ -47,6 +57,8 @@ run: | export LDFLAGS="-fuse-ld=lld" ./autogen.sh && ./configure + - name: Distcheck + run: make -j "$(nproc)" distcheck - name: Build run: make -j$((`nproc`+1)) - name: Install diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/exfatprogs-1.4.1/.gitignore new/exfatprogs-1.4.2/.gitignore --- old/exfatprogs-1.4.1/.gitignore 2026-05-28 01:59:45.000000000 +0200 +++ new/exfatprogs-1.4.2/.gitignore 2026-06-15 02:56:33.000000000 +0200 @@ -48,4 +48,5 @@ /label/exfatlabel /mkfs/mkfs.exfat /tune/tune.exfat -/upcase/*.bin +/dosattr/lsdosattr +/dosattr/chdosattr diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/exfatprogs-1.4.1/NEWS new/exfatprogs-1.4.2/NEWS --- old/exfatprogs-1.4.1/NEWS 2026-05-28 01:59:45.000000000 +0200 +++ new/exfatprogs-1.4.2/NEWS 2026-06-15 02:56:33.000000000 +0200 @@ -1,3 +1,13 @@ +exfatprogs 1.4.2 - released 2026-06-15 +====================================== + +CHANGES : + * exfatprogs: install lsdosattr and chdosattr in /bin instead of + /sbin. + +BUG FIXES : + * dump.exfat: prevent heap buffer overflow in name parsing. + exfatprogs 1.4.1 - released 2026-05-28 ====================================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/exfatprogs-1.4.1/README.md new/exfatprogs-1.4.2/README.md --- old/exfatprogs-1.4.1/README.md 2026-05-28 01:59:45.000000000 +0200 +++ new/exfatprogs-1.4.2/README.md 2026-06-15 02:56:33.000000000 +0200 @@ -10,11 +10,11 @@ ## Building exfatprogs Install prerequisite packages: ``` -For Ubuntu: - sudo apt-get install autoconf libtool pkg-config +For Debian, Ubuntu: + sudo apt-get install autoconf libtool automake make pkgconf libblkid-dev For Fedora, RHEL: - sudo yum install autoconf automake libtool + sudo dnf install autoconf automake libtool libblkid-devel ``` Build steps: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/exfatprogs-1.4.1/dosattr/Makefile.am new/exfatprogs-1.4.2/dosattr/Makefile.am --- old/exfatprogs-1.4.1/dosattr/Makefile.am 2026-05-28 01:59:45.000000000 +0200 +++ new/exfatprogs-1.4.2/dosattr/Makefile.am 2026-06-15 02:56:33.000000000 +0200 @@ -3,7 +3,7 @@ lsdosattr_LDADD = $(top_builddir)/lib/libexfat.a chdosattr_LDADD = $(top_builddir)/lib/libexfat.a -sbin_PROGRAMS = lsdosattr chdosattr +bin_PROGRAMS = lsdosattr chdosattr noinst_HEADERS = dosattr.h diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/exfatprogs-1.4.1/dump/dump.c new/exfatprogs-1.4.2/dump/dump.c --- old/exfatprogs-1.4.1/dump/dump.c 2026-05-28 01:59:45.000000000 +0200 +++ new/exfatprogs-1.4.2/dump/dump.c 2026-06-15 02:56:33.000000000 +0200 @@ -33,22 +33,6 @@ #define dump_dentry_field_wrap(fmt, ...) \ exfat_info(" %-30s " fmt "\n", "", ##__VA_ARGS__) -static const unsigned char used_bit[] = { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3,/* 0 ~ 19*/ - 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4,/* 20 ~ 39*/ - 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5,/* 40 ~ 59*/ - 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,/* 60 ~ 79*/ - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4,/* 80 ~ 99*/ - 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6,/*100 ~ 119*/ - 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4,/*120 ~ 139*/ - 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,/*140 ~ 159*/ - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5,/*160 ~ 179*/ - 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5,/*180 ~ 199*/ - 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6,/*200 ~ 219*/ - 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,/*220 ~ 239*/ - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 /*240 ~ 255*/ -}; - static void usage(void) { fprintf(stderr, "Usage: dump.exfat\n"); @@ -75,18 +59,6 @@ {NULL, 0, NULL, 0 } }; -static unsigned int exfat_count_used_clusters(unsigned char *bitmap, - unsigned long long bitmap_len) -{ - unsigned int count = 0; - unsigned long long i; - - for (i = 0; i < bitmap_len; i++) - count += used_bit[bitmap[i]]; - - return count; -} - static int exfat_read_dentry(struct exfat *exfat, struct exfat_inode *inode, uint8_t type, struct exfat_dentry *dentry, off_t *dentry_off) { @@ -226,9 +198,7 @@ return -EIO; } - used_clus = exfat_count_used_clusters( - (unsigned char *)exfat->disk_bitmap, - bitmap_len); + used_clus = exfat_count_used_clusters(exfat->disk_bitmap, (size_t)bitmap_len); exfat_info("\n---------------- Show the statistics ----------------\n"); dump_field("Cluster size", "%u", bd->cluster_size); @@ -763,7 +733,7 @@ } inode->dentry_set[i] = *dentry; - if (dentry->type == EXFAT_NAME) + if (dentry->type == EXFAT_NAME && i < 2 + MAX_NAME_DENTRIES) memcpy(inode->name + (i - 2) * ENTRY_NAME_MAX, dentry->name_unicode, sizeof(dentry->name_unicode)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/exfatprogs-1.4.1/fsck/fsck.c new/exfatprogs-1.4.2/fsck/fsck.c --- old/exfatprogs-1.4.1/fsck/fsck.c 2026-05-28 01:59:45.000000000 +0200 +++ new/exfatprogs-1.4.2/fsck/fsck.c 2026-06-15 02:56:33.000000000 +0200 @@ -1766,18 +1766,6 @@ exfat_stat.fixed_count); } -static clus_t count_bitmap_set_bits(struct exfat *exfat) -{ - clus_t count = 0; - size_t i, bytes = exfat->disk_bitmap_size; - - for (i = 0; i + sizeof(uint32_t) <= bytes; i += sizeof(uint32_t)) - count += __builtin_popcount(*(uint32_t *)(exfat->disk_bitmap + i)); - for (; i < bytes; i++) - count += __builtin_popcount(exfat->disk_bitmap[i]); - return count; -} - static int do_put_mbr(const struct exfat_blk_dev *bd, struct pbr *bs, const bool recursive) { int ret = 0; @@ -2078,7 +2066,8 @@ } if (exfat_fsck.options & FSCK_OPTS_PROGRESS_BAR) { - used_clus_count = count_bitmap_set_bits(exfat_fsck.exfat); + used_clus_count = exfat_count_used_clusters(exfat_fsck.exfat->disk_bitmap, + (size_t)exfat_fsck.exfat->disk_bitmap_size); progress_init(&exfat_fsck.progress_bar, 0, used_clus_count, 0); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/exfatprogs-1.4.1/include/libexfat.h new/exfatprogs-1.4.2/include/libexfat.h --- old/exfatprogs-1.4.1/include/libexfat.h 2026-05-28 01:59:45.000000000 +0200 +++ new/exfatprogs-1.4.2/include/libexfat.h 2026-06-15 02:56:33.000000000 +0200 @@ -211,6 +211,10 @@ clus_t start_clu, clus_t *next); int exfat_bitmap_find_one(struct exfat *exfat, unsigned char *bmap, clus_t start_clu, clus_t *next); +/* + * Count ones in the bitmap. The function won't handle unaligned bitmaps. + */ +unsigned int exfat_count_used_clusters(const void *bitmap, const size_t bitmap_len); void show_version(void); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/exfatprogs-1.4.1/include/version.h new/exfatprogs-1.4.2/include/version.h --- old/exfatprogs-1.4.1/include/version.h 2026-05-28 01:59:45.000000000 +0200 +++ new/exfatprogs-1.4.2/include/version.h 2026-06-15 02:56:33.000000000 +0200 @@ -5,7 +5,7 @@ #ifndef _VERSION_H -#define EXFAT_PROGS_VERSION "1.4.1" -#define EXFAT_PROGS_RELEASE_DATE "2026-05-28" +#define EXFAT_PROGS_VERSION "1.4.2" +#define EXFAT_PROGS_RELEASE_DATE "2026-06-15" #endif /* !_VERSION_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/exfatprogs-1.4.1/lib/libexfat.c new/exfatprogs-1.4.2/lib/libexfat.c --- old/exfatprogs-1.4.1/lib/libexfat.c 2026-05-28 01:59:45.000000000 +0200 +++ new/exfatprogs-1.4.2/lib/libexfat.c 2026-06-15 02:56:33.000000000 +0200 @@ -115,6 +115,22 @@ start_clu, next, 1); } +unsigned int exfat_count_used_clusters(const void *bitmap, const size_t bitmap_len) +{ + const size_t lc = bitmap_len / sizeof(unsigned long); + unsigned int ret = 0; + + assert((uintptr_t)bitmap % sizeof(unsigned long) == 0); + + for (size_t i = 0; i < lc; i++) + ret += __builtin_popcountl(((unsigned long*)bitmap)[i]); + for (size_t i = lc * sizeof(unsigned long); i < bitmap_len; i++) + ret += __builtin_popcountl(((unsigned char*)bitmap)[i]); + + return ret; +} + + wchar_t exfat_bad_char(wchar_t w) { return (w < 0x0020)
