aboutsummaryrefslogtreecommitdiffstats
path: root/src (follow)
AgeCommit message (Collapse)AuthorFilesLines
2025-10-05cksum: allow -a {blake2b,sha2,sha3} --check to work on base64Collin Funk1-4/+40
* NEWS: Mention the bug. * src/digest.c (split_3): Check that the base64 digest matches the length supported by the algorithm. (digest_check): Check that the read digest matches the base64 length of the algorithm's digest. The previous condition would not work for 'cksum -a blake2b -l 8 ...'. * tests/cksum/cksum-base64-untagged.sh: New file. * tests/local.mk (all_tests): Add the new test.
2025-10-03maint: remove IRIX supportCollin Funk2-7/+0
* src/ptx.c (main) [HAVE_SETCHRCLASS]: Remove call to setchrclass. * src/stty.c (VREPRINT) [!VREPRINT && VRPRNT]: Remove definition.
2025-10-02unexpand: fix heap buffer overflow with --tabs=[+/]NUMPádraig Brady1-5/+14
This avoids CWE-122: Heap-based Buffer Overflow where we could write blank characters beyond the allocated heap buffer. * src/expand-common.c (set_max_column_width): Refactor function from ... (add_tab_stop): ... here. (set_extend_size): Call new function. (set_increment_size): Likewise. * NEWS: Mention the bug fix. Fixes https://bugs.gnu.org/79555
2025-10-01maint: prefer unreachable () to NOTREACHED commentCollin Funk1-1/+1
* src/tsort.c (search_item): Use unreachable () instead of NOTREACHED.
2025-09-30fold: move multi-byte character reading to a moduleCollin Funk1-92/+63
* gl/modules/mbbuf: New file. * gl/lib/mbbuf.c: Likewise. * gl/lib/mbbuf.h: Likewise. * gl/local.mk (EXTRA_DIST): Add the new files. * bootstrap.conf (gnulib_modules): Add mbbuf. * src/fold.c: Include mbbuf.h. (fold_file): Use the mbbuf functions instead of calling fread and handling the input buffer ourselves. * cfg.mk (exclude_file_name_regexp--sc_preprocessor_indentation) (exclude_file_name_regexp--sc_GPL_version): Match gl/lib/mbbuf.c and gl/lib/mbbuf.h.
2025-09-30wc: add AVX512 function for line countingMathieu Bordere4-4/+92
* configure.ac: Add detection of AVX512 intrinsics for wc. * src/local.mk: Build AVX512 wc libraries. * src/wc.c: Add runtime detection of AVX512 intrinsics and call appropriate function when detected. * src/wc.h (wc_lines_avx512): Declare function. * tests/wc/wc-cpu.sh: Add a test that disables AVX512 intrinsics. * src/wc_avx512.c: New file containing the wc -l implementation using AVX512. The logic and code is reused from the AVX2 implementation with slight adaptations. Replaced __builtin_popcount by __builtin_popcountll and the combination of _mm256_cmpeq_epi8 and _mm256_movemask_epi8 by a single call to _mm512_cmpeq_epi8_mask. * NEWS: Mention the improvement.
2025-09-27maint: convert some overflow checks to ckd_add and ckd_mulCollin Funk5-20/+7
* src/csplit.c (parse_repeat_count): Prefer ckd_add when checking for overflows. * src/install.c (get_ids): Likewise. * src/shred.c (dopass): Likewise. * src/tr.c (get_spec_stats): Likewise. * src/sort.c (specify_sort_size): Prefer ckd_mul when checking for overflows.
2025-09-25join: remove unused #include "argmatch.h"Bernhard Voelker1-1/+0
Prompted by the syntax-check failure: maint.mk: the above files include argmatch.h but don't use it make: *** [maint.mk:741: sc_prohibit_argmatch_without_use] Error 1 * src/join.c: Remove include, as the previous commit changed from using ARRAY_CARDINALITY to countof - for which system.h includes the header.
2025-09-24maint: prefer countof over ARRAY_CARDINALITYCollin Funk12-28/+21
* bootstrap.conf (gnulib_modules): Add stdcountof-h. * src/system.h: Include stdcountof.h. (ARRAY_CARDINALITY): Remove definition. * .gitignore (/lib/stdcountof.h): Ignore Gnulib generated file. * src/csplit.c: Use countof instead of ARRAY_CARDINALITY. * src/df.c: Likewise. * src/digest.c: Likewise. * src/dircolors.c: Likewise. * src/factor.c: Likewise. * src/join.c: Likewise. * src/ls.c: Likewise. * src/od.c: Likewise. * src/sort.c: Likewise. * src/stdbuf.c: Likewise. * src/tr.c: Likewise.
2025-09-24tail: fix tailing larger number of lines in regular filesHannes Braun1-1/+1
* src/tail.c (file_lines): Seek to the previous block instead of the beginning (or a little before) of the block that was just scanned. Otherwise, the same block is read and scanned (at least partially) again. This bug was introduced by commit v9.7-219-g976f8abc1. * tests/tail/basic-seek.sh: Add a new test. * tests/local.mk: Reference the new test. * NEWS: mention the bug fix.
2025-09-24build: copy: add dependency on $(LIB_SMACK)Pádraig Brady1-0/+1
* src/local.mk: Due to gnulib adjustments, this explicit dependency is required with the mold linker at least. Reported at https://github.com/coreutils/coreutils/issues/113
2025-09-23basenc: --base58: fix buffer overflow with input > 15MBPádraig Brady1-18/+25
base58_length() operated naively on an int which resulted in an overflow to a negative number for any input > 2^31-1/138, i.e. 15,561,475 bytes. * src/basenc.c (base_length): Change input and output parameter types from int to idx_t since this needs to cater for the full input size in the base58 case. (base58_length): Likewise. Also reorder the calculation to be less exact, but doing the division first to minimize the chance of overflow (which now on 64 bit would only happen for inputs > around 6 Exa bytes). * tests/basenc/basenc-large.sh: Add a new test, that triggers with valgrind or ASAN. * tests/local.mk: Reference the new test. * NEWS: Mention the bug fix.
2025-09-23build: fix build failure with mismatched pclmulPádraig Brady1-0/+2
* src/cksum.c (pclmul_supported): In the case where gnulib has pclmul enabled but coreutils does not, ensure we don't reference the coreutils pclmul function. Addresses https://bugs.gnu.org/79491
2025-09-19touch: fix diagnostic on macOS 26Grisha Levit1-2/+3
* src/touch.c (touch): Do not use open_errno == EEXIST for diagnostic if file was a directory as macOS 26 sets it for open("/", O_CREAT, ...).
2025-09-19copy: pacify older clangPaul Eggert1-9/+10
* src/copy-file-data.c (copy_file_data): Redo conditionals for clarity. This pacifies the clang in FreeBSD 11 and OpenBSD 7.6. Problem reported by Bruno Haible in: https://lists.gnu.org/r/coreutils/2025-09/msg00104.html
2025-09-18dd: don't mistakenly use O_EXCL on GNU/HurdCollin Funk1-0/+1
* src/dd.c (v): Add the O_EXCL flag to the set of bits that we do not want to use for our definitions. * cfg.mk (sc_dd_O_FLAGS): Adjust to pass syntax-check. * NEWS: Mention the fix. Reported by Bruno Haible.
2025-09-18fmt: eliminate a clang -Wformat-extra-args warningBruno Haible1-1/+7
* src/fmt.c (fmt): When not reading from stdin, always mention the file name in the error message.
2025-09-18build: fix link failure on macOSPádraig Brady1-1/+1
* src/local.mk: Explicitly depend on @INTL_MACOS_LIBS@ which may be not implicitly referenced (in LIBINTL) without gettext. This is a new transitive dependency through localename-unsafe. We add this globally to ease future maintenance as currently 6 commands require the localename-unsafe dependency: date, du through show-date() (fprintftime), and ls, pr, stat, uptime through strftime().
2025-09-17maint: prefer memeq to memcmpPaul Eggert9-21/+19
* gl/modules/randread-tests (Depends-on): Add stringeq. * gl/tests/test-rand-isaac.c (main): * src/copy.c (source_is_dst_backup): * src/digest.c (b64_equal): * src/install.c (have_same_content): * src/ls.c (main, parse_ls_color): * src/nl.c (check_section): * src/od.c (write_block): * src/seq.c (seq_fast): * src/stty.c (eq_mode): * src/system.h (is_nul): Prefer memeq to memcmp when either will do.
2025-09-17maint: STREQ → streqPaul Eggert51-203/+202
Use new Gnulib streq function instead of rolling our own macro. * bootstrap.conf (gnulib_modules): Add stringeq. * src/rm.c (main): Don’t assume streq is a macro that expands to (...), as it is now a function. * src/system.h: * tests/df/no-mtab-status.sh, tests/df/skip-duplicates.sh: (STREQ): Remove. All uses replaced by streq.
2025-09-16maint: remove unnecessary uintmaxtostr usage in printfCollin Funk4-24/+14
* src/comm.c (compare_files): Use the "%ju" printf directive instead of "%s" and printing the result of umaxtostr. * src/df.c (get_header): Likewise. * src/ls.c (print_long_format): Likewise. * src/sort.c (check): Likewise.
2025-09-16fold: fix write error checks with invalid multi-byte inputPádraig Brady1-11/+13
* src/fold.c (write_out): A new helper to check all writes. (fold-file): Use write_out() for all writes. * tests/fold/fold-zero-width.sh: Adjust to writing more data in various patterns, rather than two buffers of NULs. This is a more robust memory bound check, and the '\303' case tests this particular logic change. * NEWS: fold now exits immediately, not just promptly.
2025-09-16fold: exit promptly upon write errorsPádraig Brady1-0/+4
* NEWS: Mention the improvement. * src/fold.c (fold_file): Check for write errors after each buffer read from stdin. * tests/misc/write-errors.sh: Add test cases.
2025-09-16maint: basenc: refactor overloaded use of ctx->i memberPádraig Brady1-42/+76
* src/basenc.c (base_decode_context): Remove the shared "i" member, instead using per encoding data and access functions for tracking pending data.
2025-09-16maint: avoid syntax-check failures from recent commitsPádraig Brady2-3/+4
* cfg.mk: Avoid spellcheck failures. * src/copy-file-data.c: Avoid sc_tight_scope and long_lines failure. * src/copy.h: Avoid indentation issues.
2025-09-15cp: create_hole now returns off_tPaul Eggert1-8/+10
* src/copy-file-data.c (create_hole): Refactor by returning resulting offset, not bool. All callers changed.
2025-09-15cp: prefer signed types in copy-file-data.cPaul Eggert1-11/+13
* src/copy-file-data.c (sparse_copy, lseek_copy) (copy_file_data): Prefer idx_t to size_t. (copy_file_data): Defend against st_size < 0, which can happen on ancient buggy platforms. Check for overflow; the old code was wrong on theoretical-but-valid hosts where SIZE_MAX <= INT_MAX.
2025-09-15cp: don’t allocate a separate zero bufferPaul Eggert1-21/+11
* src/copy-file-data.c (write_zeros): New args abuf, buf_size. Use the lazily-allocated buffer, which most likely already exists, rather than allocating a separate buffer just for zeros. This makes the code more reentrant as there is no longer a need for static storage here. Although there is some CPU overhead due to the need to zero out the buffer for each file, the overhead is relatively small as the buffer is smallish and should be cached. All callers changed.
2025-09-15cp: refactor copying to return bytes copiedPaul Eggert3-64/+69
This doesn’t change behavior; it simplifies future changes. * src/copy-file-data.c (sparse_copy, lseek_copy, copy_file_data): Return the number of bytes copied, or -1 on failure, instead of merely returning a success indication. All callers changed.
2025-09-15cp: copy_file_data now supports ibytesPaul Eggert1-11/+29
This does not affect current coreutils behavior; it is merely to help make copy_file_data more useful in the future. * src/copy-file-data.c (lseek_copy): New arg ibytes. Caller changed. (copy_file_data): Implement the ibytes arg; formerly it was always treated as COUNT_MAX, though all callers currently pass COUNT_MAX so there was no problem in practice.
2025-09-15cp: prefer signed type for file byte countPaul Eggert1-4/+4
* src/copy-file-data.c (sparse_copy): max_n_read arg is now of type count_t, not uintmax_t. This is better for debugging with -fsanitize=undefined.
2025-09-15cp: port better to old limited hostsPaul Eggert3-5/+14
Port better ancient platforms where OFF_T_MAX is only 2**31 - 1, but some devices have more than that many bytes. * src/copy-file-data.c (copy_file_data): Byte count is now count_t, not off_t. All callers changed. Since we need to check for overflow anyway, also check for too-small calls to fadvise.
2025-09-15cp: refactor out data copyingPaul Eggert4-595/+621
* po/POTFILES.in, src/local.mk (copy_sources): Add the new file. * src/copy.c: Move the #includes of alignalloc.h, buffer-lcm.h, fadvise.h, full-write.h, ioblksize.h to copy-file-data.c. (enum copy_debug_val, struct copy_debug): Move these decls to copy.h. (punch_hole, create_hole, is_CLONENOTSUP, sparse_copy) (write_zeros, lseek_copy, HAVE_STRUCT_STAT_ST_BLOCKS) (enum scantype, struct scan_inference, infer_scantype): Move to copy-file-data.c. (copy_reg): Move the data-copying part of this function to the new function copy_file_data in copy-file-data.c. * src/copy-file-data.c: New file, taken from part of copy.c.
2025-09-15cp: refactor src/copy.cPaul Eggert1-109/+139
This is in preparation for splitting this large module. * src/copy.c (sparse_copy, lseek_copy): New arg DEBUG, used to identify copy debug info instead of using a static var. All callers changed. (lseek_copy, infer_scantype): New args SRC_POS and POS. Callers changed. (copy_file_data): New function, with contents taken from copy. (copy_reg): Call it.
2025-09-15fold: fix out of bounds write with zero width charactersCollin Funk1-4/+11
* src/fold.c (fold_file): Prefer putchar ('\n') to copying characters. If we do not have room in the output buffer print it since it is not a full line of text. * tests/fold/fold-zero-width.sh: New test case. * tests/local.mk (all_tests): Add it.
2025-09-15cp: improve umask cachingPaul Eggert1-2/+4
* src/copy.c (cached_umask): Avoid syscalls when cached umask is 0. This can also help the compiler’s static analysis.
2025-09-14basenc: fix an uninitialized index when decoding an empty fileCollin Funk1-0/+4
* src/basenc.c (base64_decode_ctx_init_wrapper) (base64url_decode_ctx_init_wrapper) (base32_decode_ctx_init_wrapper) (base32hex_decode_ctx_init_wrapper): Initialize ctx->i to zero. Fixes https://bugs.gnu.org/79444
2025-09-14cksum,wc: support disabling hardware acceleration at runtimePádraig Brady2-9/+13
This is useful to give better test coverage at least, and may be useful for users to tune their environment. * bootstrap.conf: Reference the cpu-supports gnulib module. * src/cksum.c: Use cpu_supports() rather than __builtin_cpu_supports(). * src/wc.c: Likewise. * tests/cksum/cksum.sh: Adjust to testing all implementations. * tests/wc/wc-cpu.sh: A new test to do likewise. * tests/local.mk: Reference the new wc test.
2025-09-13factor: port to strict CPaul Eggert1-1/+1
Problem found with Oracle Developer Studio 12.6. * src/factor.c (factor): Don’t return f() when f returns void.
2025-09-11maint: document some functions used by expand and unexpandCollin Funk2-5/+10
* src/expand-common.h (get_next_tab_column, cleanup_file_list_stdin) (emit_tab_list_info): Document functions. * src/expand-common.c (cleanup_file_list_stdin, emit_tab_list_info): Likewise.
2025-09-10maint: basenc: refactor all encodings to use finalizePádraig Brady1-60/+78
Finalize was required for base58, but it's a more general mechanism which simplifies the logic for all encodings * src/basenc.c (do_decode): Always call base_decode_ctx_finalize(), rather than the awkward double loop at end of buffer. * tests/basenc/basenc.pl: Add basenc finalization tests.
2025-09-09maint: cleanup libraries unnecessarily added to foldCollin Funk1-3/+0
* src/local.mk (src_fold_LDADD): Remove $(MBRTOWC_LIB) since it is already added to LDADD. Remove $(LIBC32CONV) and $(LIBUNISTRING) which were for an uncommitted patch which used Gnulib's mbfile module.
2025-09-09nohup: avoid FORTIFY runtime failure on Bionic libcPádraig Brady1-1/+1
The meaning of non-file permission umask bits is implementation defined. On Bionic libc, attempting to set them triggers a FORTIFY runtime check. $ nohup true FORTIFY: umask: called with invalid mask -601 Aborted nohup true * src/nohup.c: (main) Avoid setting non-permission bits in umask. Just clear the umask to ensure we create nohup.out with u+rw, as we restore the original umask before the exec(). * tests/misc/nohup.sh: Add a test case. * NEWS: Mention the bug fix.
2025-09-08basenc: ensure partial padding with newlines induces an errorPádraig Brady1-1/+17
* src/basenc.c (has_padding): A more robust helper to identify padding in the presence of trailing newlines. (do_decode): Use has_padding() rather than just looking at the last character. * tests/basenc/base64.pl: Fully test commit v9.4-53-g378dc38f4 by ensuring partially padded data is diagnosed. baddecode9 is the case fixed in this commit. * NEWS: Mention the bug fix.
2025-09-07date: support overriding named formatsPádraig Brady1-12/+3
* src/date.c (main): Allow specifying different named formats, with the last specified taking precedence. * NEWS: Mention the bug fix.
2025-09-04maint: prefer c32isspace to iswspaceCollin Funk1-1/+1
* src/wc.c (wc): Replace call to iswspace with c32isspace.
2025-09-04cksum: prefer -a sha2 -l ###, to -a sha###Pádraig Brady1-29/+61
To make the interface more concise and consistent, while being backwards compatible. * src/digest.c (main): Continue to support -a "sha###" but also support -a "sha2" and treat it like "sha3", except in... (output_file): ... maintain the legacy tags for better compatability. * doc/coreutils.texi (cksum invocation): Document the -a sha2 option. * tests/cksum/cksum-base64.pl: Adjust as per modified --help. * tests/cksum/cksum-c.sh: Add new supported SHA2-### tagged variant. * NEWS: Mention the new feature.
2025-09-03cksum: add support for SHA-3Collin Funk1-30/+106
* src/digest.c: Include sha3.h. (BLAKE2B_MAX_LEN): Rename to DIGEST_MAX_LEN since it is also used for SHA-3. (sha3_sum_stream): New function. (enum Algorithm, algorithm_args, algorithm_args, algorithm_types) algorithm_tags, algorithm_bits, cksumfns, cksum_output_fns): Add entries for SHA-3. (usage): Mention that SHA-3 is supported. Mention requirements for --length with SHA-3. (split_3): Use DIGEST_MAX_LEN instead of BLAKE2B_MAX_LEN. Determine the length of the digest for SHA-3. Make sure it is 224, 256, 384, or 512. (digest_file): Set the digest length in bytes. Use DIGEST_MAX_LEN instead of BLAKE2B_MAX_LEN. Always append the digest length to SHA3 in the output. (main): Allow the use of --length with 'cksum -a sha3'. Use DIGEST_MAX_LEN instead of BLAKE2B_MAX_LEN. Make sure it is 224, 256, 384, or 512. * tests/cksum/cksum-base64.pl (@pairs): Add expected sha3 output. (fmt): Modify the output to use SHA3-512 since that is the default. (@Tests): Modify arguments for sha3 to use --length=512. * tests/cksum/cksum-sha3.sh: New test, based on tests/cksum/b2sum.sh. * tests/local.mk (all_tests): Add the test. * bootstrap.conf: Add crypto/sha3. * gnulib: Update to latest commit. * NEWS: Mention the change. * doc/coreutils.texi (cksum general options): Mention sha3 as a supported argument to the -a option. Mention that 'cksum -a sha3' supports the --length option. Mention that SHA-3 is considered secure.
2025-09-03maint: avoid syntax-check failure from previous commitCollin Funk3-3/+0
* src/df.c: Don't include uchar.h. * src/ls.c: Likewise. * src/wc.c: Likewise.
2025-09-03fold: check that characters are not non-breaking spaces when -s is usedCollin Funk3-9/+17
NetBSD 10 and Solaris 11.4 treat non-breaking spaces as blank characters unlike glibc. * src/system.h: Include uchar.h. (c32isnbspace): New function based on iswnbspace from src/wc.c. * src/fold.c (fold_file): Use it. * src/wc.c (iswnbspace): Remove function. (maybe_c32isnbspace): New function. (wc, main): Use it. Fixes https://bugs.gnu.org/79300