aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorJustus Winter <[email protected]>2016-07-26 16:29:01 +0000
committerJustus Winter <[email protected]>2016-07-26 16:37:37 +0000
commitb2572b0c386fd12ac6581fcce72f8d48cbfd27c7 (patch)
tree562942c29a59deae8c35a79079562d8d9022ca9c /tests
parentgpgscm: Do not shadow common function name in catch macro. (diff)
downloadgnupg-b2572b0c386fd12ac6581fcce72f8d48cbfd27c7.tar.gz
gnupg-b2572b0c386fd12ac6581fcce72f8d48cbfd27c7.zip
common: Fix iobuf_peek corner case.
Previously, iobuf_peek on a file smaller than 'buflen' would hang. * common/iobuf.c (underflow): Generalize by adding a target parameter. (iobuf_peek): Use this to prevent looping here. * tests/openpgp/Makefile.am (TESTS): Add new test. * tests/openpgp/setup.scm (dearmor): Move function... * tests/openpgp/defs.scm (dearmor): ... here. * tests/openpgp/issue2419.scm: New file. * tests/openpgp/samplemsgs/issue2419.asc: Likewise. GnuPG-bug-id: 2419 Signed-off-by: Justus Winter <[email protected]>
Diffstat (limited to 'tests')
-rw-r--r--tests/openpgp/Makefile.am1
-rw-r--r--tests/openpgp/defs.scm7
-rwxr-xr-xtests/openpgp/issue2419.scm28
-rw-r--r--tests/openpgp/samplemsgs/issue2419.asc7
-rwxr-xr-xtests/openpgp/setup.scm8
5 files changed, 43 insertions, 8 deletions
diff --git a/tests/openpgp/Makefile.am b/tests/openpgp/Makefile.am
index f8932d646..718b4bc07 100644
--- a/tests/openpgp/Makefile.am
+++ b/tests/openpgp/Makefile.am
@@ -84,6 +84,7 @@ TESTS = setup.scm \
ssh.scm \
issue2015.scm \
issue2346.scm \
+ issue2419.scm \
finish.scm
diff --git a/tests/openpgp/defs.scm b/tests/openpgp/defs.scm
index 06bc0b828..9408cd5f4 100644
--- a/tests/openpgp/defs.scm
+++ b/tests/openpgp/defs.scm
@@ -133,6 +133,13 @@
(string-split
(call-popen `(,@GPG --with-colons ,@args) input) #\newline)))
+;; Dearmor a file.
+(define (dearmor source-name sink-name)
+ (pipe:do
+ (pipe:open source-name (logior O_RDONLY O_BINARY))
+ (pipe:spawn `(,@GPG --dearmor))
+ (pipe:write-to sink-name (logior O_WRONLY O_CREAT O_BINARY) #o600)))
+
(let ((verbose (string->number (getenv "verbose"))))
(if (number? verbose)
(*set-verbose!* verbose)))
diff --git a/tests/openpgp/issue2419.scm b/tests/openpgp/issue2419.scm
new file mode 100755
index 000000000..efc42a6ae
--- /dev/null
+++ b/tests/openpgp/issue2419.scm
@@ -0,0 +1,28 @@
+#!/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"))
+
+(info "Checking iobuf_peek corner case (issue2419)...")
+(lettmp
+ (onebyte)
+ (dearmor (in-srcdir "samplemsgs/issue2419.asc") onebyte)
+ (catch (assert (string-contains? *error* "invalid packet"))
+ (call-popen `(,@GPG --list-packets ,onebyte) "")
+ (error "Expected an error but got none")))
diff --git a/tests/openpgp/samplemsgs/issue2419.asc b/tests/openpgp/samplemsgs/issue2419.asc
new file mode 100644
index 000000000..b73efedde
--- /dev/null
+++ b/tests/openpgp/samplemsgs/issue2419.asc
@@ -0,0 +1,7 @@
+-----BEGIN PGP ARMORED FILE-----
+Version: GnuPG v2
+Comment: Use "gpg --dearmor" for unpacking
+
+AA==
+=YWnT
+-----END PGP ARMORED FILE-----
diff --git a/tests/openpgp/setup.scm b/tests/openpgp/setup.scm
index 9ad19c284..8fc154346 100755
--- a/tests/openpgp/setup.scm
+++ b/tests/openpgp/setup.scm
@@ -55,14 +55,6 @@
CLOSED_FD fd STDERR_FILENO)))
'(500 9000 32000 80000))
-(define (dearmor source-name sink-name)
- (pipe:do
- (pipe:open source-name (logior O_RDONLY O_BINARY))
- (pipe:spawn `(,@GPG --dearmor))
- (pipe:write-to sink-name
- (logior O_WRONLY O_CREAT O_BINARY)
- #o600)))
-
(for-each-p "Unpacking samples"
(lambda (name)
(dearmor (in-srcdir (string-append name "o.asc")) name))