diff options
author | Werner Koch <[email protected]> | 2024-09-06 14:08:53 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2024-09-06 14:09:49 +0000 |
commit | 2cc340eca04dba31167435cada20a9198f953e30 (patch) | |
tree | c14ef513c4258500a5d833536e6cca3dac347f8f /g10/build-packet.c | |
parent | gpg: Make --no-literal work again for -c and --store. (diff) | |
download | gnupg-2cc340eca04dba31167435cada20a9198f953e30.tar.gz gnupg-2cc340eca04dba31167435cada20a9198f953e30.zip |
gpg: Improve detection of input data read errors.
* g10/build-packet.c (do_plaintext): Better error checking for
iobuf_copy.
--
Fixes-commit: 695cb04af5218cd7b42c7eaaefc186472b99a995
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).
Diffstat (limited to 'g10/build-packet.c')
-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 606c5c2d8..57a67d9f4 100644 --- a/g10/build-packet.c +++ b/g10/build-packet.c @@ -1064,9 +1064,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); |