Fixed opaque signature verification.
authorWerner Koch <wk@gnupg.org>
Fri, 17 Oct 2008 18:22:02 +0000 (18:22 +0000)
committerWerner Koch <wk@gnupg.org>
Fri, 17 Oct 2008 18:22:02 +0000 (18:22 +0000)
Other minor changes.

NEWS
configure.ac
po/sv.po
src/ChangeLog
src/engine-assuan.c
src/engine.c
src/mimeparser.c

diff --git a/NEWS b/NEWS
index d7875b6..ebc5053 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,9 @@
+Noteworthy changes for version 0.10.16
+===================================================
+
+ * Fixed a regression in the last release with opaque signatures.
+
+
 Noteworthy changes for version 0.10.15 (2008-08-06)
 ===================================================
 
index d7adc80..2707e15 100644 (file)
@@ -16,8 +16,8 @@ min_automake_version="1.9.4"
 # Remember to change the version number immediately *after* a release.
 # Set my_issvn to "yes" for non-released code.  Remember to run an
 # "svn up" and "autogen.sh" right before creating a distribution.
-m4_define([my_version], [0.10.15])
-m4_define([my_issvn], [no])
+m4_define([my_version], [0.10.16])
+m4_define([my_issvn], [yes])
 
 m4_define([svn_revision], m4_esyscmd([echo -n $( (svn info 2>/dev/null \
             || echo 'Revision: 0')|sed -n '/^Revision:/ {s/[^0-9]//gp;q;}')]))
index f9bf1bf..cf473e8 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GPGol\n"
 "Report-Msgid-Bugs-To: bug-gpgol@g10code.com\n"
-"POT-Creation-Date: 2008-08-06 07:48+0200\n"
+"POT-Creation-Date: 2008-08-06 08:04+0200\n"
 "PO-Revision-Date: 2006-12-12 23:52+0100\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -507,7 +507,7 @@ msgstr ""
 msgid "Crypto Engine"
 msgstr ""
 
-#: src/olflange-dlgs.cpp:215
+#: src/olflange-dlgs.cpp:216
 msgid ""
 "You have enabled GpgOL's support for the S/MIME protocol.\n"
 "\n"
@@ -518,11 +518,11 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: See the source for the full english text.
-#: src/olflange-dlgs.cpp:270
+#: src/olflange-dlgs.cpp:272
 msgid "-#GpgOLFullHelpText#-"
 msgstr ""
 
-#: src/olflange-dlgs.cpp:276
+#: src/olflange-dlgs.cpp:278
 #, c-format
 msgid "This is GpgOL version %s"
 msgstr ""
index d807be1..240198a 100644 (file)
@@ -1,3 +1,14 @@
+2008-10-17  Werner Koch  <wk@g10code.com>
+
+       * mimeparser.c (mime_verify_opaque): Remove extra semicolon which
+       shortcuted most of the code.  Why didn't gcc notice that?  Bug
+       was introduced on 2008-06-12.
+
+       * engine-assuan.c (create_io_pipe, send_options) 
+       (op_assuan_encrypt, op_assuan_sign, op_assuan_decrypt) 
+       (op_assuan_verify): Replace use of long in snprint by int to
+       workaround a bug in mingw32. Doesn't matter on w32 anyway.
+
 2008-10-16  Werner Koch  <wk@g10code.com>
 
        * mimeparser.c (start_attachment): Take care not to set the file
index d28abb3..4273d93 100644 (file)
@@ -240,8 +240,8 @@ create_io_pipe (HANDLE filedes[2], pid_t serverpid, int for_write)
      only one instance, use the standard timeout of 120 seconds and
      buffers of 4k. */
   pipeno = InterlockedIncrement (&pipenumber);
-  snprintf (pipename, sizeof pipename, "\\\\.\\pipe\\GpgOL_anon.%08lx.%08lx",
-            (unsigned long)GetCurrentProcessId(), pipeno);
+  snprintf (pipename, sizeof pipename, "\\\\.\\pipe\\GpgOL_anon.%08x.%08x",
+            (unsigned int)GetCurrentProcessId(), (unsigned int)pipeno);
   sec_attr.bInheritHandle = /*for_write? TRUE :*/FALSE;
   r = CreateNamedPipe (pipename, (PIPE_ACCESS_INBOUND
                                   | (for_write? 0:FILE_FLAG_OVERLAPPED)),
@@ -437,7 +437,7 @@ send_options (assuan_context_t ctx, void *hwnd, pid_t *r_pid)
 
   if (!err && hwnd)
     {
-      snprintf (numbuf, sizeof numbuf, "%lx", (unsigned long)hwnd);
+      snprintf (numbuf, sizeof numbuf, "%x", (unsigned int)hwnd);
       err = send_one_option (ctx, "window-id", numbuf);
     }
 
@@ -1513,7 +1513,7 @@ start_command (assuan_context_t ctx, closure_data_t cld,
   cld->status_cbs.write = status_in_cb;
   cld->assctx = ctx;
   /* Fixme: We might want to have reference counting for CLD to cope
-     with thye problem that the gpgme data object uses CLD which might
+     with the problem that the gpgme data object uses CLD which might
      get invalidated at any time.  */
   err = gpgme_data_new_from_cbs (&cld->status_data, &cld->status_cbs, cld);
   if (err)
@@ -1669,11 +1669,11 @@ op_assuan_encrypt (protocol_t protocol,
      duplicate the handle into the server process and the server then
      uses this handle.  Eventually we should put this code into
      assuan_sendfd.  */
-  snprintf (line, sizeof line, "INPUT FD=%ld", (unsigned long int)inpipe[0]);
+  snprintf (line, sizeof line, "INPUT FD=%d", (unsigned int)inpipe[0]);
   err = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
   if (err)
     goto leave;
-  snprintf (line, sizeof line, "OUTPUT FD=%ld", (unsigned long int)outpipe[1]);
+  snprintf (line, sizeof line, "OUTPUT FD=%d", (unsigned int)outpipe[1]);
   err = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
   if (err)
     goto leave;
@@ -1843,11 +1843,11 @@ op_assuan_sign (protocol_t protocol,
   *r_used_protocol = protocol;
   log_debug ("%s:%s: using protocol %s", SRCNAME, __func__, protocol_name);
 
-  snprintf (line, sizeof line, "INPUT FD=%ld", (unsigned long int)inpipe[0]);
+  snprintf (line, sizeof line, "INPUT FD=%d", (unsigned int)inpipe[0]);
   err = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
   if (err)
     goto leave;
-  snprintf (line, sizeof line, "OUTPUT FD=%ld", (unsigned long int)outpipe[1]);
+  snprintf (line, sizeof line, "OUTPUT FD=%d", (unsigned int)outpipe[1]);
   err = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
   if (err)
     goto leave;
@@ -1941,11 +1941,11 @@ op_assuan_decrypt (protocol_t protocol,
         goto leave;
     }
 
-  snprintf (line, sizeof line, "INPUT FD=%ld", (unsigned long int)inpipe[0]);
+  snprintf (line, sizeof line, "INPUT FD=%d", (unsigned int)inpipe[0]);
   err = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
   if (err)
     goto leave;
-  snprintf (line, sizeof line, "OUTPUT FD=%ld", (unsigned long int)outpipe[1]);
+  snprintf (line, sizeof line, "OUTPUT FD=%d", (unsigned int)outpipe[1]);
   err = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
   if (err)
     goto leave;
@@ -2081,13 +2081,11 @@ op_assuan_verify (gpgme_protocol_t protocol,
 
   if (!opaque_mode)
     {
-      snprintf (line, sizeof line, "MESSAGE FD=%ld",
-                (unsigned long int)msgpipe[0]);
+      snprintf (line, sizeof line, "MESSAGE FD=%d", (unsigned int)msgpipe[0]);
       err = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
       if (err)
         goto leave;
-      snprintf (line, sizeof line, "INPUT FD=%ld",
-                (unsigned long int)sigpipe[0]);
+      snprintf (line, sizeof line, "INPUT FD=%d", (unsigned int)sigpipe[0]);
       err = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
       if (err)
         goto leave;
@@ -2098,13 +2096,11 @@ op_assuan_verify (gpgme_protocol_t protocol,
     }
   else 
     {
-      snprintf (line, sizeof line, "INPUT FD=%ld",
-                (unsigned long int)msgpipe[0]);
+      snprintf (line, sizeof line, "INPUT FD=%d", (unsigned int)msgpipe[0]);
       err = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
       if (err)
         goto leave;
-      snprintf (line, sizeof line, "OUTPUT FD=%ld",
-                (unsigned long int)outpipe[1]);
+      snprintf (line, sizeof line, "OUTPUT FD=%d", (unsigned int)outpipe[1]);
       err = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
       if (err)
         goto leave;
index 46eba31..5b0205f 100644 (file)
@@ -257,7 +257,7 @@ filter_gpgme_read_cb (void *handle, void *buffer, size_t size)
     }
 
   if (debug_filter)
-    log_debug ("%s:%s: enter\n",  SRCNAME, __func__);
+    log_debug ("%s:%s: filter %p: enter\n",  SRCNAME, __func__, filter );
   take_in_lock (filter, __func__);
   while (!filter->in.length)
     {
@@ -265,7 +265,8 @@ filter_gpgme_read_cb (void *handle, void *buffer, size_t size)
         {
           release_in_lock (filter, __func__);
           if (debug_filter)
-            log_debug ("%s:%s: returning EOF\n", SRCNAME, __func__);
+            log_debug ("%s:%s: filter %p: returning EOF\n", 
+                       SRCNAME, __func__, filter );
           return 0; /* Return EOF. */
         }
       release_in_lock (filter, __func__);
@@ -273,23 +274,26 @@ filter_gpgme_read_cb (void *handle, void *buffer, size_t size)
         {
           errno = EAGAIN;
           if (debug_filter_extra)
-            log_debug ("%s:%s: leave; result=EAGAIN\n", SRCNAME, __func__);
+            log_debug ("%s:%s: filter %p: leave; result=EAGAIN\n",
+                       SRCNAME, __func__, filter);
           switch_threads (filter);
           return -1;
         }
       else
         clear_switch_threads (filter);
       if (debug_filter)
-        log_debug ("%s:%s: waiting for in.condvar\n", SRCNAME, __func__);
+        log_debug ("%s:%s: filter %p: waiting for in.condvar\n",
+                   SRCNAME, __func__, filter);
       WaitForSingleObject (filter->in.condvar, 500);
       take_in_lock (filter, __func__);
       if (debug_filter)
-        log_debug ("%s:%s: continuing\n", SRCNAME, __func__);
+        log_debug ("%s:%s: filter %p: continuing\n", 
+                   SRCNAME, __func__, filter);
     }
      
   if (debug_filter)
-    log_debug ("%s:%s: requested read size=%d (filter.in.length=%d)\n",
-               SRCNAME, __func__, (int)size, (int)filter->in.length);
+    log_debug ("%s:%s: filter %p: requested read size=%d (in.length=%d)\n",
+               SRCNAME, __func__, filter, (int)size, (int)filter->in.length);
   nbytes = size < filter->in.length ? size : filter->in.length;
   memcpy (buffer, filter->in.buffer, nbytes);
   if (filter->in.length > nbytes)
@@ -299,8 +303,8 @@ filter_gpgme_read_cb (void *handle, void *buffer, size_t size)
   release_in_lock (filter, __func__);
 
   if (debug_filter)
-    log_debug ("%s:%s: leave; result=%d\n",
-               SRCNAME, __func__, (int)nbytes);
+    log_debug ("%s:%s: filter %p: leave; result=%d\n",
+               SRCNAME, __func__, filter, (int)nbytes);
   
   return nbytes;
 }
@@ -627,6 +631,9 @@ engine_create_filter (engine_filter_t *r_filter,
   if (err)
     goto failure;
 
+  if (debug_filter)
+    log_debug ("%s:%s: filter %p: created\n", 
+               SRCNAME, __func__, filter );
   *r_filter = filter;
   return 0;
 
@@ -822,7 +829,8 @@ engine_cancel (engine_filter_t filter)
         engine_gpgme_cancel (cancel_data);
       if (WaitForSingleObject (filter->in.ready_event, INFINITE)
           != WAIT_OBJECT_0)
-        log_error_w32 (-1, "%s:%s: WFSO failed", SRCNAME, __func__);
+        log_error_w32 (-1, "%s:%s: filter %p: WFSO failed", 
+                       SRCNAME, __func__, filter);
       else
         log_debug ("%s:%s: filter %p: backend has been canceled", 
                    SRCNAME, __func__,  filter);
index fd4f577..32e8c96 100644 (file)
@@ -1378,7 +1378,7 @@ mime_verify_opaque (protocol_t protocol, LPSTREAM instream,
     err = engine_verify_start (filter, hwnd, NULL, 0, protocol, from);
     xfree (from);
   }
-  if (err);
+  if (err)
     goto leave;
 
   if (instream)
@@ -1399,16 +1399,27 @@ mime_verify_opaque (protocol_t protocol, LPSTREAM instream,
             }
           else if (nread)
             {
+/*               if (debug_mime_data) */
+/*                 log_hexdump (buffer, nread, "%s:%s: ctx=%p, data: ", */
+/*                              SRCNAME, __func__, ctx); */
               err = engine_filter (filter, buffer, nread);
             }
           else
-            break; /* EOF */
+            {
+/*               if (debug_mime_data) */
+/*                 log_debug ("%s:%s: ctx=%p, data: EOF\n", */
+/*                            SRCNAME, __func__, ctx); */
+              break; /* EOF */
+            }
         }
       while (!err);
     }
   else
     {
       /* Filter the buffer.  */
+/*       if (debug_mime_data) */
+/*         log_hexdump (inbuffer, inbufferlen, "%s:%s: ctx=%p, data: ", */
+/*                      SRCNAME, __func__, ctx); */
       err = engine_filter (filter, inbuffer, inbufferlen);
     }
   if (err)