common/iobuf.c: Flush the pipeline in iobuf_temp_to_buffer.
authorNeal H. Walfield <neal@g10code.com>
Fri, 14 Aug 2015 11:19:22 +0000 (13:19 +0200)
committerNeal H. Walfield <neal@g10code.com>
Thu, 20 Aug 2015 12:16:23 +0000 (14:16 +0200)
* common/iobuf.c (iobuf_temp_to_buffer): Flush each filter in the
pipeline and copy the data from the last (not the first) filter's
internal buffer.

--
Signed-off-by: Neal H. Walfield <neal@g10code.com>.
common/iobuf.c

index c5e43cc..e6b70a1 100644 (file)
@@ -2123,8 +2123,20 @@ iobuf_write_temp (iobuf_t a, iobuf_t temp)
 size_t
 iobuf_temp_to_buffer (iobuf_t a, byte * buffer, size_t buflen)
 {
-  size_t n = a->d.len;
+  size_t n;
 
+  while (1)
+    {
+      int rc = filter_flush (a);
+      if (rc)
+       log_bug ("Flushing iobuf %d.%d (%s) from iobuf_temp_to_buffer failed.  Ignoring.\n",
+                a->no, a->subno, iobuf_desc (a));
+      if (! a->chain)
+       break;
+      a = a->chain;
+    }
+
+  n = a->d.len;
   if (n > buflen)
     n = buflen;
   memcpy (buffer, a->d.buf, n);