diff options
author | Werner Koch <[email protected]> | 2024-09-06 14:08:53 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2024-09-19 11:18:20 +0000 |
commit | 178c3fe62c251c762152a7dc883f009d41f08244 (patch) | |
tree | b5f0bbb200ff4242f1ff1df3af89ed75564c56f5 | |
parent | gpg: Make --no-literal work again for -c and --store. (diff) | |
download | gnupg-178c3fe62c251c762152a7dc883f009d41f08244.tar.gz gnupg-178c3fe62c251c762152a7dc883f009d41f08244.zip |
gpg: Improve detection of input data read errors.
* g10/build-packet.c (do_plaintext): Better error checking for
iobuf_copy.
--
Fixes-commit: 2fdb950471bd36f046672254ff26ca94797cc9f1
GnuPG-bug-id: 6528
The original fix handles only the disk full case but didn't bother
about read errors (i.e. I/O problems on an external drive).
-rw-r--r-- | g10/build-packet.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/g10/build-packet.c b/g10/build-packet.c index 19a13760a..8b5b20af4 100644 --- a/g10/build-packet.c +++ b/g10/build-packet.c @@ -993,9 +993,16 @@ do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt ) if (nbytes == (size_t)(-1) && (iobuf_error (out) || iobuf_error (pt->buf))) return iobuf_error (out)? iobuf_error (out):iobuf_error (pt->buf); - /* Always get the error to catch write errors because - * iobuf_copy does not reliable return (-1) in that case. */ - rc = iobuf_error (out); + else if (nbytes != (size_t)(-1) && iobuf_error (pt->buf)) + rc = iobuf_error (pt->buf); /* Read error. */ + else + { + /* Always get the iobuf error to catch write errors + * because iobuf_copy returns (-1) only if there was a + * errors in the output stream when entering that + * function. */ + rc = iobuf_error (out); + } if(ctb_new_format_p (ctb) && !pt->len) /* Turn off partial body length mode. */ iobuf_set_partial_body_length_mode (out, 0); |