Skip to content

fix(dd): ensure full block writes to handle partial writes to slow pipes#8840

Closed
romanstingler wants to merge 2 commits intouutils:mainfrom
romanstingler:main
Closed

fix(dd): ensure full block writes to handle partial writes to slow pipes#8840
romanstingler wants to merge 2 commits intouutils:mainfrom
romanstingler:main

Conversation

@romanstingler
Copy link

Addressed a bug in dd where partial writes to a slow pipe reader resulted in truncated output. Modified write_block in Output struct to retry writing until the full block is written, ignoring the fullblock flag for output operations. This ensures data integrity even with slow readers, matching GNU dd behavior. Fixes issue observed in tests with mismatched MD5 sums and partial record counts (e.g., 0+1 records out).

https://download.virtualbox.org/virtualbox/7.2.2/ -> VBoxGuestAdditions_7.2.2.iso

❯ sudo mkdir -p /mnt/vbox
  sudo mount -o loop VBoxGuestAdditions_7.2.2.iso /mnt/vbox
  cp /mnt/vbox/VBoxLinuxAdditions.run . 
  sudo umount /mnt/vbox
  rmdir /mnt/vbox
  ls -l VBoxLinuxAdditions.run 

Partial Write Bug in uutils dd

The partial write bug in uutils dd occurs when writing large blocks to a pipe with a slow reader, resulting in truncated output (as seen with 0+1 records out and mismatched MD5 sums). The key area of interest is how dd handles writing data to the output destination.

In dd.rs, the write_block method of the Output struct (lines 864-883) is responsible for writing a block of data to the destination.

Issue Identified

The current implementation retries writing if the write operation is interrupted (io::ErrorKind::Interrupted), which is correct. However, it does not handle the case where a partial write occurs (i.e., wlen < chunk[base_idx..].len()) without being interrupted. When writing to a pipe with a slow reader, the kernel may return a partial write (less than the requested amount) without an error, and the code exits the loop if !self.settings.iflags.fullblock is true. Since iflags.fullblock is typically not set for output operations (it's meant for input), the loop exits after the first partial write, leading to truncated output.

Root Cause

The condition if (base_idx >= full_len) || !self.settings.iflags.fullblock means that unless fullblock is set (which it often isn't for output), the function returns after the first write attempt, even if only part of the data was written. This mimics the behavior we observed in tests where uutils dd does not retry to write the remaining data, causing the 0+1 records out and mismatched byte counts/MD5 sums.

Proposed Fix

To fix the partial write issue, we need to ensure that write_block continues to retry writing until the entire block is written or an error occurs, regardless of the fullblock flag. The fullblock flag should only apply to input operations, not output. Here's how we can modify the code:

  • Remove the !self.settings.iflags.fullblock condition from the loop exit criteria in write_block.
  • Continue looping until base_idx >= full_len or a non-interrupted error occurs.

This change ensures that uutils dd matches the behavior of GNU dd in handling partial writes to slow pipes, preventing data truncation.

related
https://bugs.launchpad.net/ubuntu/+source/makeself/+bug/2125535
VirtualBox/virtualbox#226 (comment)
megastep/makeself@51e7299

@github-actions
Copy link

github-actions bot commented Oct 8, 2025

GNU testsuite comparison:

Skip an intermittent issue tests/tail/overlay-headers (fails in this run but passes in the 'main' branch)
Skipping an intermittent issue tests/misc/tee (passes in this run but fails in the 'main' branch)

@github-actions
Copy link

GNU testsuite comparison:

Skip an intermittent issue tests/misc/tee (fails in this run but passes in the 'main' branch)
Skipping an intermittent issue tests/timeout/timeout (passes in this run but fails in the 'main' branch)

@RenjiSann
Copy link
Collaborator

The tests you added pass without your patch to dd, so I don't think they're a good measurement for this fix

@github-actions
Copy link

GNU testsuite comparison:

Skipping an intermittent issue tests/timeout/timeout (passes in this run but fails in the 'main' branch)

@sylvestre sylvestre requested a review from RenjiSann October 16, 2025 09:11
@sylvestre
Copy link
Contributor

both test_buffer_flush_on_input_exhaustion test_single_byte_input_buffer_flush pass without your changes in dd.rs, is that expected ?

@akretz
Copy link
Contributor

akretz commented Oct 24, 2025

I stumbled upon this PR while investigating issue #8983. The issue is, as @romanstingler has correctly pointed out, that Output.write_block() silently drops any remaining data if the underlying write doesn't write the whole buffer. The expected behavior is to advance in the buffer and to continue writing the remaining buffer.

The fullblock flag just forces that there are no partial reads. Writes should always process the whole read buffer.

A simple way to reproduce this bug on my machine is

dd if=/dev/urandom bs=16384 count=1000 | md5sum

GNU dd always writes all the 16384000 bytes (the number is printed in stderr) while uutils dd always drops some bytes.

I have created a test in akretz@3deeb91 which reproduces this failure case and which gets fixed by this PR. It always fails on my machine. Feel free to cherry-pick it!

@romanstingler
Copy link
Author

romanstingler commented Oct 25, 2025

@akretz hey, first of all thank you very much for picking up that one.
Unfortunately, I had some family tragedy and had no time and mental capacity to work on that.

@sylvestre maybe you can have a look

thanks guys

@github-actions
Copy link

GNU testsuite comparison:

Skip an intermittent issue tests/misc/tee (fails in this run but passes in the 'main' branch)

@anastygnome
Copy link
Contributor

There are some dead code and linting issues.

@romanstingler
Copy link
Author

There are some dead code and linting issues.

/srv/opensource/coreutils bugfix/dd-invalid-input ≡ 13s
❯ cargo build --release
   Compiling cfg-if v1.0.1
   Compiling zerocopy v0.8.27
   Compiling version_check v0.9.5
   Compiling typenum v1.18.0
   Compiling memchr v2.7.6
   Compiling rustix v1.1.2
   Compiling linux-raw-sys v0.11.0
   Compiling shlex v1.3.0
   Compiling getrandom v0.3.3
   Compiling smallvec v1.15.1
   Compiling regex-syntax v0.8.5
   Compiling icu_normalizer_data v2.0.0
   Compiling unicode-width v0.2.2
   Compiling nix v0.30.1
   Compiling libc v0.2.175
   Compiling icu_collator_data v2.0.0
   Compiling either v1.15.0
   Compiling syn v2.0.103
   Compiling rustversion v1.0.21
   Compiling num-integer v0.1.46
   Compiling crc32fast v1.5.0
   Compiling constant_time_eq v0.3.1
   Compiling data-encoding v2.9.0
   Compiling arrayref v0.3.9
   Compiling cpufeatures v0.2.17
   Compiling same-file v1.0.6
   Compiling cc v1.2.27
   Compiling arrayvec v0.7.6
   Compiling crc-catalog v2.4.0
   Compiling walkdir v2.5.0
   Compiling flate2 v1.1.2
   Compiling keccak v0.1.5
   Compiling crc v3.3.0
   Compiling uucore v0.3.0 (/srv/opensource/coreutils/src/uucore)
   Compiling vsimd v0.8.0
   Compiling generic-array v0.14.7
   Compiling utf16_iter v1.0.5
   Compiling outref v0.5.2
   Compiling utf8_iter v1.0.4
   Compiling os_display v0.1.4
   Compiling itertools v0.14.0
   Compiling jiff v0.2.15
   Compiling z85 v3.0.6
   Compiling blake2b_simd v1.0.3
   Compiling once_cell v1.21.3
   Compiling crunchy v0.2.3
   Compiling tiny-keccak v2.0.2
   Compiling aho-corasick v1.1.3
   Compiling crossbeam-utils v0.8.21
   Compiling log v0.4.27
   Compiling portable-atomic v1.11.1
   Compiling lock_api v0.4.13
   Compiling siphasher v1.0.1
   Compiling unicode-width v0.1.14
   Compiling parking_lot_core v0.9.11
   Compiling unicode-segmentation v1.12.0
   Compiling base64-simd v0.8.0
   Compiling pkg-config v0.3.32
   Compiling radium v0.7.0
   Compiling phf_shared v0.13.1
   Compiling equivalent v1.0.2
   Compiling nu-ansi-term v0.50.3
   Compiling foldhash v0.1.5
   Compiling ansi-width v0.1.0
   Compiling unit-prefix v0.5.1
   Compiling fastrand v2.3.0
   Compiling fnv v1.0.7
   Compiling allocator-api2 v0.2.21
   Compiling rayon-core v1.13.0
   Compiling tap v1.0.1
   Compiling convert_case v0.7.1
   Compiling scopeguard v1.2.0
   Compiling wyz v0.5.1
   Compiling phf_generator v0.13.1
   Compiling uutils_term_grid v0.7.0
   Compiling crossbeam-epoch v0.9.18
   Compiling winnow v0.7.11
   Compiling litrs v0.4.1
   Compiling hashbrown v0.14.5
   Compiling funty v2.0.0
   Compiling phf_codegen v0.13.1
   Compiling bytecount v0.6.9
   Compiling notify-types v2.0.0
   Compiling getrandom v0.2.16
   Compiling crypto-common v0.1.6
   Compiling block-buffer v0.10.4
   Compiling hashbrown v0.15.4
   Compiling crossbeam-deque v0.8.6
   Compiling compare v0.1.0
   Compiling const-random-macro v0.1.16
   Compiling coreutils v0.3.0 (/srv/opensource/coreutils)
   Compiling nom v8.0.0
   Compiling digest v0.10.7
   Compiling fs_extra v1.3.0
   Compiling binary-heap-plus v0.5.0
   Compiling unicode-linebreak v0.1.5
   Compiling blake3 v1.8.2
   Compiling onig_sys v69.9.1
   Compiling smawk v0.3.2
   Compiling document-features v0.2.11
   Compiling const-random v0.1.18
   Compiling md-5 v0.10.6
   Compiling sha3 v0.10.8
   Compiling sha2 v0.10.9
   Compiling sm3 v0.4.2
   Compiling sha1 v0.10.6
   Compiling rand_core v0.6.4
   Compiling rand_core v0.9.3
   Compiling mio v1.0.4
   Compiling signal-hook-registry v1.4.5
   Compiling console v0.16.0
   Compiling lscolors v0.21.0
   Compiling inotify-sys v0.1.5
   Compiling hostname v0.4.1
   Compiling dlv-list v0.5.2
   Compiling inotify v0.11.0
   Compiling signal-hook v0.3.18
   Compiling filetime v0.2.26
   Compiling bitvec v1.0.1
   Compiling lru v0.12.5
   Compiling rayon v1.11.0
   Compiling regex-automata v0.4.12
   Compiling ordered-multimap v0.7.3
   Compiling parking_lot v0.12.4
   Compiling notify v8.2.0
   Compiling signal-hook-mio v0.2.4
   Compiling memmap2 v0.9.9
   Compiling byteorder v1.5.0
   Compiling indicatif v0.18.1
   Compiling rust-ini v0.21.3
   Compiling ctrlc v3.4.7
   Compiling synstructure v0.13.2
   Compiling zerofrom-derive v0.1.6
   Compiling yoke-derive v0.8.0
   Compiling zerovec-derive v0.11.1
   Compiling displaydoc v0.2.5
   Compiling zerocopy-derive v0.8.27
   Compiling thiserror-impl v2.0.17
   Compiling data-encoding-macro-internal v0.1.16
   Compiling derive_more-impl v2.0.1
   Compiling terminal_size v0.4.3
   Compiling xattr v1.6.1
   Compiling procfs v0.18.0
   Compiling tempfile v3.23.0
   Compiling clap_builder v4.5.50
   Compiling textwrap v0.16.2
   Compiling data-encoding-macro v0.1.18
   Compiling derive_more v2.0.1
   Compiling crossterm v0.29.0
   Compiling zerofrom v0.1.6
   Compiling thiserror v2.0.17
   Compiling yoke v0.8.0
   Compiling fluent-syntax v0.12.0
   Compiling zerotrie v0.2.2
   Compiling zerovec v0.11.2
   Compiling regex v1.12.2
   Compiling bstr v1.12.0
   Compiling tinystr v0.8.1
   Compiling potential_utf v0.1.2
   Compiling icu_collections v2.0.0
   Compiling parse_datetime v0.11.0
   Compiling unic-langid-impl v0.9.6
   Compiling icu_locale_core v2.0.0
   Compiling ppv-lite86 v0.2.21
   Compiling half v2.7.1
   Compiling unic-langid v0.9.6
   Compiling fluent-langneg v0.13.0
   Compiling intl_pluralrules v7.0.2
   Compiling intl-memoizer v0.5.3
   Compiling clap v4.5.50
   Compiling rand_chacha v0.3.1
   Compiling rand_chacha v0.9.0
   Compiling fluent-bundle v0.16.0
   Compiling rand v0.9.2
   Compiling rand v0.8.5
   Compiling icu_provider v2.0.0
   Compiling fluent v0.17.0
   Compiling icu_locale v2.0.0
   Compiling icu_properties v2.0.1
   Compiling icu_normalizer v2.0.0
   Compiling crc-fast v1.5.0
   Compiling num-bigint v0.4.6
   Compiling icu_collator v2.0.0
   Compiling bigdecimal v0.4.9
   Compiling num-modular v0.5.1
   Compiling num-prime v0.4.4
   Compiling uu_base32 v0.3.0 (/srv/opensource/coreutils/src/uu/base32)
   Compiling uu_ls v0.3.0 (/srv/opensource/coreutils/src/uu/ls)
   Compiling uu_rm v0.3.0 (/srv/opensource/coreutils/src/uu/rm)
   Compiling uu_wc v0.3.0 (/srv/opensource/coreutils/src/uu/wc)
   Compiling uu_csplit v0.3.0 (/srv/opensource/coreutils/src/uu/csplit)
   Compiling uu_ln v0.3.0 (/srv/opensource/coreutils/src/uu/ln)
   Compiling uu_du v0.3.0 (/srv/opensource/coreutils/src/uu/du)
   Compiling uu_tsort v0.3.0 (/srv/opensource/coreutils/src/uu/tsort)
   Compiling uu_unexpand v0.3.0 (/srv/opensource/coreutils/src/uu/unexpand)
   Compiling uu_cksum v0.3.0 (/srv/opensource/coreutils/src/uu/cksum)
   Compiling uu_df v0.3.0 (/srv/opensource/coreutils/src/uu/df)
   Compiling uu_nl v0.3.0 (/srv/opensource/coreutils/src/uu/nl)
   Compiling uu_basename v0.3.0 (/srv/opensource/coreutils/src/uu/basename)
   Compiling uu_numfmt v0.3.0 (/srv/opensource/coreutils/src/uu/numfmt)
   Compiling uu_touch v0.3.0 (/srv/opensource/coreutils/src/uu/touch)
   Compiling uu_cp v0.3.0 (/srv/opensource/coreutils/src/uu/cp)
   Compiling uu_echo v0.3.0 (/srv/opensource/coreutils/src/uu/echo)
   Compiling uu_join v0.3.0 (/srv/opensource/coreutils/src/uu/join)
   Compiling uu_fold v0.3.0 (/srv/opensource/coreutils/src/uu/fold)
   Compiling uu_seq v0.3.0 (/srv/opensource/coreutils/src/uu/seq)
   Compiling uu_ptx v0.3.0 (/srv/opensource/coreutils/src/uu/ptx)
   Compiling uu_dd v0.3.0 (/srv/opensource/coreutils/src/uu/dd)
   Compiling uu_base64 v0.3.0 (/srv/opensource/coreutils/src/uu/base64)
   Compiling uu_basenc v0.3.0 (/srv/opensource/coreutils/src/uu/basenc)
   Compiling uu_fmt v0.3.0 (/srv/opensource/coreutils/src/uu/fmt)
   Compiling uu_mv v0.3.0 (/srv/opensource/coreutils/src/uu/mv)
   Compiling uu_printf v0.3.0 (/srv/opensource/coreutils/src/uu/printf)
   Compiling uu_shuf v0.3.0 (/srv/opensource/coreutils/src/uu/shuf)
   Compiling uu_vdir v0.3.0 (/srv/opensource/coreutils/src/uu/vdir)
   Compiling uu_dir v0.3.0 (/srv/opensource/coreutils/src/uu/dir)
   Compiling uu_tee v0.3.0 (/srv/opensource/coreutils/src/uu/tee)
   Compiling uu_sum v0.3.0 (/srv/opensource/coreutils/src/uu/sum)
   Compiling uu_tac v0.3.0 (/srv/opensource/coreutils/src/uu/tac)
   Compiling uu_factor v0.3.0 (/srv/opensource/coreutils/src/uu/factor)
   Compiling uu_rmdir v0.3.0 (/srv/opensource/coreutils/src/uu/rmdir)
   Compiling uu_shred v0.3.0 (/srv/opensource/coreutils/src/uu/shred)
   Compiling uu_tail v0.3.0 (/srv/opensource/coreutils/src/uu/tail)
   Compiling uu_realpath v0.3.0 (/srv/opensource/coreutils/src/uu/realpath)
   Compiling uu_date v0.3.0 (/srv/opensource/coreutils/src/uu/date)
   Compiling uu_mktemp v0.3.0 (/srv/opensource/coreutils/src/uu/mktemp)
   Compiling uu_yes v0.3.0 (/srv/opensource/coreutils/src/uu/yes)
   Compiling onig v6.5.1
   Compiling uu_pwd v0.3.0 (/srv/opensource/coreutils/src/uu/pwd)
   Compiling uu_more v0.3.0 (/srv/opensource/coreutils/src/uu/more)
   Compiling uu_paste v0.3.0 (/srv/opensource/coreutils/src/uu/paste)
   Compiling uu_od v0.3.0 (/srv/opensource/coreutils/src/uu/od)
   Compiling uu_cat v0.3.0 (/srv/opensource/coreutils/src/uu/cat)
   Compiling uu_truncate v0.3.0 (/srv/opensource/coreutils/src/uu/truncate)
   Compiling uu_split v0.3.0 (/srv/opensource/coreutils/src/uu/split)
   Compiling uu_sleep v0.3.0 (/srv/opensource/coreutils/src/uu/sleep)
   Compiling uu_tr v0.3.0 (/srv/opensource/coreutils/src/uu/tr)
   Compiling uu_unlink v0.3.0 (/srv/opensource/coreutils/src/uu/unlink)
   Compiling uu_hashsum v0.3.0 (/srv/opensource/coreutils/src/uu/hashsum)
   Compiling uu_readlink v0.3.0 (/srv/opensource/coreutils/src/uu/readlink)
   Compiling uu_expand v0.3.0 (/srv/opensource/coreutils/src/uu/expand)
   Compiling uu_mkdir v0.3.0 (/srv/opensource/coreutils/src/uu/mkdir)
   Compiling uu_expr v0.3.0 (/srv/opensource/coreutils/src/uu/expr)
   Compiling uu_link v0.3.0 (/srv/opensource/coreutils/src/uu/link)
   Compiling uu_test v0.3.0 (/srv/opensource/coreutils/src/uu/test)
   Compiling uu_printenv v0.3.0 (/srv/opensource/coreutils/src/uu/printenv)
   Compiling uu_true v0.3.0 (/srv/opensource/coreutils/src/uu/true)
   Compiling uu_false v0.3.0 (/srv/opensource/coreutils/src/uu/false)
   Compiling uu_pr v0.3.0 (/srv/opensource/coreutils/src/uu/pr)
   Compiling uu_env v0.3.0 (/srv/opensource/coreutils/src/uu/env)
   Compiling uu_comm v0.3.0 (/srv/opensource/coreutils/src/uu/comm)
   Compiling uu_dirname v0.3.0 (/srv/opensource/coreutils/src/uu/dirname)
   Compiling uu_dircolors v0.3.0 (/srv/opensource/coreutils/src/uu/dircolors)
   Compiling uu_sort v0.3.0 (/srv/opensource/coreutils/src/uu/sort)
   Compiling uu_cut v0.3.0 (/srv/opensource/coreutils/src/uu/cut)
   Compiling uu_head v0.3.0 (/srv/opensource/coreutils/src/uu/head)
   Compiling uu_uniq v0.3.0 (/srv/opensource/coreutils/src/uu/uniq)
    Finished `release` profile [optimized] target(s) in 1m 14s

maybe your rebase or whatever?

if you mean cargo clippy

warning: manually reimplementing `div_ceil`
    --> src/uu/dd/src/dd.rs:1032:24
     |
1032 |     let aligned_size = ((size + alignment - 1) / alignment) * alignment;
     |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `size.div_ceil(alignment)`
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_div_ceil
     = note: `-W clippy::manual-div-ceil` implied by `-W clippy::all`
     = help: to override `-W clippy::all` add `#[allow(clippy::manual_div_ceil)]`

warning: only a `panic!` in `if`-then statement
    --> src/uu/dd/src/dd.rs:1043:13
     |
1043 | /             if aligned_ptr.is_null() {
1044 | |                 panic!("Failed to allocate aligned memory");
1045 | |             }
     | |_____________^ help: try instead: `assert!(!aligned_ptr.is_null(), "Failed to allocate aligned memory");`
     |
     = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_assert
     = note: `-W clippy::manual-assert` implied by `-W clippy::pedantic`
     = help: to override `-W clippy::pedantic` add `#[allow(clippy::manual_assert)]`

warning: `uu_dd` (lib) generated 2 warnings (run `cargo clippy --fix --lib -p uu_dd` to apply 2 suggestions)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 5.11s
    ```
    
    I haven't touched this and it is not my code.

@github-actions
Copy link

github-actions bot commented Nov 3, 2025

GNU testsuite comparison:

Skipping an intermittent issue tests/misc/tee (passes in this run but fails in the 'main' branch)

@RenjiSann
Copy link
Collaborator

 error[E0599]: no function or associated item named `from_utf8` found for type `str` in the current scope
    --> tests/by-util/test_dd.rs:1813:14
     |
1813 |         str::from_utf8(&output.stderr)
     |              ^^^^^^^^^ function or associated item not found in `str`
     |
help: you are looking for the module in `std`, not the primitive type
     |
1813 |         std::str::from_utf8(&output.stderr)
     |         +++++

@romanstingler romanstingler force-pushed the main branch 2 times, most recently from 0fee31b to 40c9c41 Compare November 4, 2025 17:47
@codspeed-hq
Copy link

codspeed-hq bot commented Nov 4, 2025

CodSpeed Performance Report

Merging this PR will not alter performance

Comparing romanstingler:main (acc1bf7) with main (0f59f95)

Summary

✅ 139 untouched benchmarks
⏩ 37 skipped benchmarks1

Footnotes

  1. 37 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@github-actions
Copy link

github-actions bot commented Nov 4, 2025

GNU testsuite comparison:

Congrats! The gnu test tests/printf/printf-surprise is no longer failing!

@github-actions
Copy link

github-actions bot commented Nov 4, 2025

GNU testsuite comparison:

Skipping an intermittent issue tests/tail/overlay-headers (passes in this run but fails in the 'main' branch)

@romanstingler
Copy link
Author

@RenjiSann does it work for you, Ubuntu solved it by cherry picking this MR

@RenjiSann
Copy link
Collaborator

Yes, thank you !

@RenjiSann
Copy link
Collaborator

I'll happily merge this as soon as the conflicts are fixed (sorry for not merging this sooner, I wanted to retry the failed jobs and then forgot about it)

@RenjiSann
Copy link
Collaborator

Looks good to me, could you just squash the merge commits that were just added ?
Thanks !

@github-actions
Copy link

GNU testsuite comparison:

Skipping an intermittent issue tests/tail/overlay-headers (passes in this run but fails in the 'main' branch)

@romanstingler romanstingler force-pushed the main branch 2 times, most recently from a6c925e to b2c00de Compare December 15, 2025 19:44
@github-actions
Copy link

GNU testsuite comparison:

Skipping an intermittent issue tests/tail/overlay-headers (passes in this run but fails in the 'main' branch)

@sylvestre
Copy link
Contributor

still fails

@github-actions
Copy link

github-actions bot commented Jan 6, 2026

GNU testsuite comparison:

Skipping an intermittent issue tests/timeout/timeout (passes in this run but fails in the 'main' branch)
Congrats! The gnu test tests/shuf/shuf-reservoir is no longer failing!
Congrats! The gnu test tests/sort/sort-stale-thread-mem is no longer failing!

@github-actions
Copy link

github-actions bot commented Jan 6, 2026

GNU testsuite comparison:

GNU test failed: tests/shuf/shuf-reservoir. tests/shuf/shuf-reservoir is passing on 'main'. Maybe you have to rebase?
GNU test failed: tests/sort/sort-stale-thread-mem. tests/sort/sort-stale-thread-mem is passing on 'main'. Maybe you have to rebase?
Congrats! The gnu test tests/tty/tty-eof is no longer failing!

@svlv
Copy link
Contributor

svlv commented Jan 14, 2026

The root cause of these partial writes and reads is line-buffered stdout, and this PR does not fix it.

The fix also did not work for me when installing makeself packages, as these packages still cannot be installed if the --noprogress option is used.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants