[Pkg-gnupg-commit] [gnupg2] 65/112: g10: Fix opening of trust database.

Daniel Kahn Gillmor dkg at fifthhorseman.net
Tue Aug 30 17:48:21 UTC 2016


This is an automated email from the git hooks/post-receive script.

dkg pushed a commit to branch master
in repository gnupg2.

commit a27410a251cd25ca96cd6743969c4db0a0fd553f
Author: Justus Winter <justus at g10code.com>
Date:   Wed Aug 10 16:41:22 2016 +0200

    g10: Fix opening of trust database.
    
    * g10/tdbio.c (tdbio_set_dbname): This function explicitly checks for
    the file size, but handled the case of a zero-sized file incorrectly
    by returning success.  Fix this by initializing the database in that
    case.
    * tests/openpgp/Makefile.am (XTESTS): Add new test.
    * tests/openpgp/issue2417.scm: New file.
    
    GnuPG-bug-id: 2417
    Signed-off-by: Justus Winter <justus at g10code.com>
---
 g10/tdbio.c                 |  4 ++--
 tests/openpgp/Makefile.am   |  1 +
 tests/openpgp/issue2417.scm | 39 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/g10/tdbio.c b/g10/tdbio.c
index e27788e..02fa91e 100644
--- a/g10/tdbio.c
+++ b/g10/tdbio.c
@@ -685,7 +685,7 @@ tdbio_set_dbname (const char *new_dbname, int create, int *r_nofile)
 
   take_write_lock ();
 
-  if (access (fname, R_OK))
+  if (access (fname, R_OK) || stat (fname, &statbuf) || statbuf.st_size == 0)
     {
       FILE *fp;
       TRUSTREC rec;
@@ -699,7 +699,7 @@ tdbio_set_dbname (const char *new_dbname, int create, int *r_nofile)
       else
         gpg_err_set_errno (EIO);
 #endif /*HAVE_W32CE_SYSTEM*/
-      if (errno != ENOENT)
+      if (errno && errno != ENOENT)
         log_fatal ( _("can't access '%s': %s\n"), fname, strerror (errno));
 
       oldmask = umask (077);
diff --git a/tests/openpgp/Makefile.am b/tests/openpgp/Makefile.am
index da12cae..5d8acbf 100644
--- a/tests/openpgp/Makefile.am
+++ b/tests/openpgp/Makefile.am
@@ -84,6 +84,7 @@ XTESTS = \
 	ssh.scm \
 	issue2015.scm \
 	issue2346.scm \
+	issue2417.scm \
 	issue2419.scm
 
 # XXX: Currently, one cannot override automake's 'check' target.  As a
diff --git a/tests/openpgp/issue2417.scm b/tests/openpgp/issue2417.scm
new file mode 100755
index 0000000..32840f2
--- /dev/null
+++ b/tests/openpgp/issue2417.scm
@@ -0,0 +1,39 @@
+#!/usr/bin/env gpgscm
+
+;; Copyright (C) 2016 g10 Code GmbH
+;;
+;; This file is part of GnuPG.
+;;
+;; GnuPG is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GnuPG is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+(load (with-path "defs.scm"))
+
+(define (touch file-name)
+  (close (open file-name (logior O_WRONLY O_BINARY O_CREAT) #o600)))
+
+(info "Checking robustness wrt empty databases in gnupghome (issue2417)...")
+
+(lettmp
+ ;; Prepare some random key to import later.
+ (keyfile)
+ (pipe:do
+  (pipe:gpg '(--export alpha))
+  (pipe:write-to keyfile (logior O_WRONLY O_BINARY O_CREAT) #o600))
+
+ (with-temporary-working-directory
+  (setenv "GNUPGHOME" "." #t)
+  (touch "trustdb.gpg")
+  (touch "pubring.gpg")
+  (touch "pubring.kbx")
+  (call-check `(,(tool 'GPG) --import ,keyfile))))

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gnupg2.git



More information about the Pkg-gnupg-commit mailing list