1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-05-24 16:43:28 +02:00

gpg: Allow the caller to write the contents of a plaintext packet.

* g10/build-packet.c (do_plaintext): Change the semantics such that if
PT->BUF is NULL, it is the caller's responsibility to write the
content (and disable partial body length mode, if appropriate).

--
Signed-off-by: Neal H. Walfield <neal@g10code.com>
This commit is contained in:
Neal H. Walfield 2016-03-02 15:35:39 +01:00
parent 1a62458614
commit 2fdb950471

View File

@ -618,7 +618,12 @@ calc_plaintext( PKT_plaintext *pt )
after this much data has been read.) If PT->LEN is 0 and CTB after this much data has been read.) If PT->LEN is 0 and CTB
indicates that this is a new format packet, then partial block mode indicates that this is a new format packet, then partial block mode
is assumed to have been enabled on OUT. On success, partial block is assumed to have been enabled on OUT. On success, partial block
mode is disabled. */ mode is disabled.
If PT->BUF is NULL, the the caller must write out the data. In
this case, if PT->LEN was 0, then partial body length mode was
enabled and the caller must disable it by calling
iobuf_set_partial_body_length_mode (out, 0). */
static int static int
do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt ) do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt )
{ {
@ -637,13 +642,16 @@ do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt )
if (rc) if (rc)
return rc; return rc;
nbytes = iobuf_copy (out, pt->buf); if (pt->buf)
if(ctb_new_format_p (ctb) && !pt->len) {
/* Turn off partial body length mode. */ nbytes = iobuf_copy (out, pt->buf);
iobuf_set_partial_body_length_mode (out, 0); if(ctb_new_format_p (ctb) && !pt->len)
if( pt->len && nbytes != pt->len ) /* Turn off partial body length mode. */
log_error("do_plaintext(): wrote %lu bytes but expected %lu bytes\n", iobuf_set_partial_body_length_mode (out, 0);
(ulong)nbytes, (ulong)pt->len ); if( pt->len && nbytes != pt->len )
log_error("do_plaintext(): wrote %lu bytes but expected %lu bytes\n",
(ulong)nbytes, (ulong)pt->len );
}
return rc; return rc;
} }