Hi!
In camel/camel-gpg-context.c (evo 1.3 cvs) there is a problem:
In gpg_ctx_op_step the file descriptors stdout_fd, stderr_fd and
status_fd are polled for input.
But stdout_fd is not read when there is no gpg->ostream to get the data
(if (FD_ISSET (gpg->stdout_fd, &rdset) && gpg->ostream)).
So the end of file state cannot be detected and thus gpg->seen_eof1
won't be set.
If that happens gpg_ctx_op_complete fails to detect when gpg has
finished and the users of these functions run in an endless loop.
The following (ugly) patch fixes the problem for me:
--- camel-gpg-context.c.orig Mon Apr 21 14:38:57 2003
+++ camel-gpg-context.c Mon Apr 21 14:44:37 2003
@@ -969,11 +969,15 @@
retry:
FD_ZERO (&rdset);
- FD_SET (gpg->stdout_fd, &rdset);
+ if (gpg->ostream)
+ FD_SET (gpg->stdout_fd, &rdset);
FD_SET (gpg->stderr_fd, &rdset);
FD_SET (gpg->status_fd, &rdset);
- maxfd = MAX (gpg->stdout_fd, gpg->stderr_fd);
+ if (gpg->ostream)
+ maxfd = MAX (gpg->stdout_fd, gpg->stderr_fd);
+ else
+ maxfd = gpg->stderr_fd;
maxfd = MAX (maxfd, gpg->status_fd);
if (gpg->stdin_fd != -1 || gpg->passwd_fd != -1) {
@@ -1181,7 +1185,7 @@
static gboolean
gpg_ctx_op_complete (struct _GpgCtx *gpg)
{
- return gpg->complete && gpg->seen_eof1 && gpg->seen_eof2;
+ return gpg->complete && (gpg->seen_eof1 || !gpg->ostream) &&
gpg->seen_eof2;
}
static gboolean
--
Christophe Saout <christophe saout de>
Attachment:
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil