aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shaw <[email protected]>2010-03-26 16:57:09 +0000
committerDavid Shaw <[email protected]>2010-03-26 16:57:09 +0000
commit5bcd4f613b97be5f7203abc9e2cd7d722c0a8a61 (patch)
treec789ac814b54d32475316dcdfdafb1586a8d5900
parentFix bug 1186 (diff)
downloadgnupg-5bcd4f613b97be5f7203abc9e2cd7d722c0a8a61.tar.gz
gnupg-5bcd4f613b97be5f7203abc9e2cd7d722c0a8a61.zip
* plaintext.c (handle_plaintext): Make sure that the stdout flush
succeeded, so we can't lose data when using gpg in a pipeline. Fixes bug #1207.
-rw-r--r--g10/ChangeLog8
-rw-r--r--g10/plaintext.c14
2 files changed, 18 insertions, 4 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index acd63a0a0..56c227bbd 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,9 @@
+2010-03-26 David Shaw <[email protected]>
+
+ * plaintext.c (handle_plaintext): Make sure that the stdout flush
+ succeeded, so we can't lose data when using gpg in a pipeline.
+ Fixes bug #1207.
+
2010-02-17 Werner Koch <[email protected]>
* keygen.c (ask_user_id): Avoid infinite loop in case of invalid
@@ -13615,7 +13621,7 @@ Thu Feb 12 22:24:42 1998 Werner Koch (wk@frodo)
Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009 Free Software Foundation, Inc.
+ 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
This file is free software; as a special exception the author gives
unlimited permission to copy and/or distribute it, with or without
diff --git a/g10/plaintext.c b/g10/plaintext.c
index f847a12c5..61c4f24a3 100644
--- a/g10/plaintext.c
+++ b/g10/plaintext.c
@@ -1,6 +1,6 @@
/* plaintext.c - process plaintext packets
- * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
- * 2006 Free Software Foundation, Inc.
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ * 2007, 2010 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
*
@@ -392,7 +392,15 @@ handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx,
/* Make sure that stdout gets flushed after the plaintext has
been handled. This is for extra security as we do a
flush anyway before checking the signature. */
- fflush (stdout);
+ if(fflush(stdout))
+ {
+ /* We check whether this fflush succeeded since fp might have
+ been stdout piping to a file. The fflush could fail if the
+ file cannot be written (disk full, etc). See bug 1207 for
+ more. */
+ log_error("Error flushing plaintext: %s\n",strerror(errno));
+ rc=G10ERR_WRITE_FILE;
+ }
if( fp && fp != stdout )
fclose(fp);