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);