aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/iobuf.c8
-rw-r--r--g10/build-packet.c3
-rw-r--r--g10/encrypt.c3
3 files changed, 9 insertions, 5 deletions
diff --git a/common/iobuf.c b/common/iobuf.c
index c88d67908..3ec64dc57 100644
--- a/common/iobuf.c
+++ b/common/iobuf.c
@@ -2430,7 +2430,7 @@ iobuf_temp_to_buffer (iobuf_t a, byte * buffer, size_t buflen)
/* Copies the data from the input iobuf SOURCE to the output iobuf
DEST until either an error is encountered or EOF is reached.
- Returns the number of bytes copies. */
+ Returns the number of bytes copies or (size_t)(-1) on error. */
size_t
iobuf_copy (iobuf_t dest, iobuf_t source)
{
@@ -2441,11 +2441,11 @@ iobuf_copy (iobuf_t dest, iobuf_t source)
size_t max_read = 0;
int err;
- assert (source->use == IOBUF_INPUT || source->use == IOBUF_INPUT_TEMP);
- assert (dest->use == IOBUF_OUTPUT || source->use == IOBUF_OUTPUT_TEMP);
+ log_assert (source->use == IOBUF_INPUT || source->use == IOBUF_INPUT_TEMP);
+ log_assert (dest->use == IOBUF_OUTPUT || source->use == IOBUF_OUTPUT_TEMP);
if (iobuf_error (dest))
- return -1;
+ return (size_t)(-1);
/* Use iobuf buffer size for temporary buffer. */
temp_size = iobuf_set_buffer_size(0) * 1024;
diff --git a/g10/build-packet.c b/g10/build-packet.c
index a631db8d8..cc953557d 100644
--- a/g10/build-packet.c
+++ b/g10/build-packet.c
@@ -970,6 +970,9 @@ do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt )
if (pt->buf)
{
nbytes = iobuf_copy (out, pt->buf);
+ if (nbytes == (size_t)(-1)
+ && (iobuf_error (out) || iobuf_error (pt->buf)))
+ return iobuf_error (out)? iobuf_error (out):iobuf_error (pt->buf);
if(ctb_new_format_p (ctb) && !pt->len)
/* Turn off partial body length mode. */
iobuf_set_partial_body_length_mode (out, 0);
diff --git a/g10/encrypt.c b/g10/encrypt.c
index bd98d06e4..7218de216 100644
--- a/g10/encrypt.c
+++ b/g10/encrypt.c
@@ -1060,6 +1060,8 @@ encrypt_filter (void *opaque, int control,
{
if ( !efx->header_okay )
{
+ efx->header_okay = 1;
+
efx->cfx.dek = create_dek_with_warnings (efx->pk_list);
rc = check_encryption_compliance (efx->cfx.dek, efx->pk_list);
@@ -1092,7 +1094,6 @@ encrypt_filter (void *opaque, int control,
/**/ : cipher_filter_cfb,
&efx->cfx);
- efx->header_okay = 1;
}
rc = iobuf_write (a, buf, size);