[svn] gpgme - r1310 - in trunk: . gpgme

svn author wk cvs at cvs.gnupg.org
Mon Apr 28 20:42:58 CEST 2008


Author: wk
Date: 2008-04-28 20:42:56 +0200 (Mon, 28 Apr 2008)
New Revision: 1310

Modified:
   trunk/ChangeLog
   trunk/configure.ac
   trunk/gpgme/ChangeLog
   trunk/gpgme/engine-gpgconf.c
   trunk/gpgme/gpgme.h
Log:
Fixed a bug reading  from gpgconf.


Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-04-22 11:20:50 UTC (rev 1309)
+++ trunk/ChangeLog	2008-04-28 18:42:56 UTC (rev 1310)
@@ -1,3 +1,7 @@
+2008-04-01  Werner Koch  <wk at g10code.com>
+
+	* configure.ac (AC_INIT): Fix quoting.
+
 2008-01-30  Marcus Brinkmann  <marcus at g10code.de>
 
 	* configure.ac: Bump required version of automake up to 1.10.

Modified: trunk/gpgme/ChangeLog
===================================================================
--- trunk/gpgme/ChangeLog	2008-04-22 11:20:50 UTC (rev 1309)
+++ trunk/gpgme/ChangeLog	2008-04-28 18:42:56 UTC (rev 1310)
@@ -1,3 +1,8 @@
+2008-04-28  Werner Koch  <wk at g10code.com>
+
+	* engine-gpgconf.c (gpgconf_read): Fixed segv.  Avoid memmove for
+	each line.
+
 2008-04-22  Marcus Brinkmann  <marcus at g10code.de>
 
 	* w32-qt-io.cpp, kdpipeiodevice.cpp: New versions from Frank

Modified: trunk/configure.ac
===================================================================
--- trunk/configure.ac	2008-04-22 11:20:50 UTC (rev 1309)
+++ trunk/configure.ac	2008-04-28 18:42:56 UTC (rev 1310)
@@ -36,7 +36,8 @@
 
 m4_define([svn_revision], m4_esyscmd([echo -n $( (svn info 2>/dev/null \
             || echo 'Revision: 0')|sed -n '/^Revision:/ {s/[^0-9]//gp;q;}')]))
-AC_INIT([gpgme], my_version[]m4_if(my_issvn,[yes],[-svn[]svn_revision]),
+AC_INIT([gpgme], 
+        [my_version[]m4_if(my_issvn,[yes],[-svn[]svn_revision])],
         [bug-gpgme at gnupg.org])
 
 

Modified: trunk/gpgme/engine-gpgconf.c
===================================================================
--- trunk/gpgme/engine-gpgconf.c	2008-04-22 11:20:50 UTC (rev 1309)
+++ trunk/gpgme/engine-gpgconf.c	2008-04-28 18:42:56 UTC (rev 1310)
@@ -198,7 +198,7 @@
   struct engine_gpgconf *gpgconf = engine;
   gpgme_error_t err = 0;
 #define LINELENGTH 1024
-  char line[LINELENGTH] = "";
+  char linebuf[LINELENGTH] = "";
   int linelen = 0;
   char *argv[] = { NULL /* file_name */, arg1, arg2, 0 };
   int rp[2];
@@ -229,28 +229,33 @@
 
   do
     {
-      nread = _gpgme_io_read (rp[0], &line[linelen], LINELENGTH - linelen - 1);
+      nread = _gpgme_io_read (rp[0], 
+                              linebuf + linelen, LINELENGTH - linelen - 1);
       if (nread > 0)
 	{
+          char *line;
+          const char *lastmark = NULL;
+          size_t nused;
+
 	  linelen += nread;
-	  line[linelen] = '\0';
+	  linebuf[linelen] = '\0';
 
-	  while ((mark = strchr (line, '\n')))
+	  for (line=linebuf; (mark = strchr (line, '\n')); line = mark+1 )
 	    {
-	      char *eol = mark;
-	      
-	      if (eol > line && eol[-1] == '\r')
-		eol--;
-	      *eol = '\0';
+              lastmark = mark;
+	      if (mark > line && mark[-1] == '\r')
+		mark--;
+	      *mark = '\0';
 
 	      /* Got a full line.  */
 	      err = (*cb) (hook, line);
 	      if (err)
-		break;
-	      
-	      linelen -= mark + 1 - line;
-	      memmove (line, mark + 1, linelen);
+		goto leave;
 	    }
+
+          nused = lastmark? (lastmark + 1 - linebuf) : 0;
+          memmove (linebuf, linebuf + nused, nused);
+          linelen -= nused;
 	}
     }
   while (nread > 0 && linelen < LINELENGTH - 1);
@@ -260,6 +265,7 @@
   if (!err && nread > 0)
     err = gpg_error (GPG_ERR_LINE_TOO_LONG);
 
+ leave:
   _gpgme_io_close (rp[0]);
 
   return err;

Modified: trunk/gpgme/gpgme.h
===================================================================
--- trunk/gpgme/gpgme.h	2008-04-22 11:20:50 UTC (rev 1309)
+++ trunk/gpgme/gpgme.h	2008-04-28 18:42:56 UTC (rev 1310)
@@ -72,7 +72,7 @@
    AM_PATH_GPGME macro) check that this header matches the installed
    library.  Warning: Do not edit the next line.  configure will do
    that for you!  */
-#define GPGME_VERSION "1.1.7-svn1301"
+#define GPGME_VERSION "1.1.7-svn1307"
 
 
 




More information about the Gnupg-commits mailing list