From 178c3fe62c251c762152a7dc883f009d41f08244 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 6 Sep 2024 16:08:53 +0200 Subject: [PATCH] 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). --- g10/build-packet.c | 13 ++++++++++--- 1 file 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);