aboutsummaryrefslogtreecommitdiffstats
path: root/g10/build-packet.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2024-09-06 14:08:53 +0000
committerWerner Koch <[email protected]>2024-09-06 14:09:49 +0000
commit2cc340eca04dba31167435cada20a9198f953e30 (patch)
treec14ef513c4258500a5d833536e6cca3dac347f8f /g10/build-packet.c
parentgpg: Make --no-literal work again for -c and --store. (diff)
downloadgnupg-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.c13
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);