[Pkg-gnupg-commit] [gpgme] 88/103: core: Also check for a failed selftest in gpgm_data_new.
Daniel Kahn Gillmor
dkg at fifthhorseman.net
Thu Dec 14 18:53:07 UTC 2017
This is an automated email from the git hooks/post-receive script.
dkg pushed a commit to branch master
in repository gpgme.
commit 0c1244a2b7e30ab0610ae70166e1b5d0219782c3
Author: Werner Koch <wk at gnupg.org>
Date: Mon Dec 4 12:08:31 2017 +0100
core: Also check for a failed selftest in gpgm_data_new.
* src/data.c (_gpgme_data_new): Check for failed selftest.
* tests/run-support.h (make_filename): Print a message on mallooc
failure.
(init_gpgme_basic): New.
* tests/run-identify.c (main): Call init_gpgme_basic becuase we do not
need to setup a protocol.
* tests/t-data.c: Define PGM and include run-support.h.
(make_filename): Remove.
(main): Call init_gpgme_basic.
--
Note: This patch may break applications which used gpgme_data but no
gpgme_new without having called the required gpgme_check_version.
GPGME can be used without a protocol for example to work with the data
object abstraction. Thus a call to gpgme_data_new also needs to check
the result of the core selftests - including on whether
gpgme_check_version has been called.
Signed-off-by: Werner Koch <wk at gnupg.org>
---
doc/gpgme.texi | 7 ++++---
src/data.c | 4 ++++
tests/run-identify.c | 2 +-
tests/run-support.h | 18 ++++++++++++++----
tests/t-data.c | 27 +++++----------------------
5 files changed, 28 insertions(+), 30 deletions(-)
diff --git a/doc/gpgme.texi b/doc/gpgme.texi
index 8dcc86e..3b461ba 100644
--- a/doc/gpgme.texi
+++ b/doc/gpgme.texi
@@ -683,9 +683,10 @@ uses, this function provides a run-time check if the necessary
features are provided by the installed version of the library.
If a selftest fails, the function may still succeed. Selftest errors
-are returned later when invoking @code{gpgme_new}, so that a detailed
-error code can be returned (historically, @code{gpgme_check_version}
-does not return a detailed error code).
+are returned later when invoking @code{gpgme_new} or
+ at code{gpgme-data_new}, so that a detailed error code can be returned
+(historically, @code{gpgme_check_version} does not return a detailed
+error code).
@end deftypefun
diff --git a/src/data.c b/src/data.c
index e4e9ee3..7ae5b32 100644
--- a/src/data.c
+++ b/src/data.c
@@ -46,6 +46,10 @@ _gpgme_data_new (gpgme_data_t *r_dh, struct _gpgme_data_cbs *cbs)
return gpg_error (GPG_ERR_INV_VALUE);
*r_dh = NULL;
+
+ if (_gpgme_selftest)
+ return _gpgme_selftest;
+
dh = calloc (1, sizeof (*dh));
if (!dh)
return gpg_error_from_syserror ();
diff --git a/tests/run-identify.c b/tests/run-identify.c
index 01e9671..9361fa2 100644
--- a/tests/run-identify.c
+++ b/tests/run-identify.c
@@ -102,7 +102,7 @@ main (int argc, char **argv)
}
- init_gpgme (GPGME_PROTOCOL_OpenPGP);
+ init_gpgme_basic ();
for (; argc; argc--, argv++)
{
diff --git a/tests/run-support.h b/tests/run-support.h
index 841b223..6a2170b 100644
--- a/tests/run-support.h
+++ b/tests/run-support.h
@@ -107,7 +107,11 @@ make_filename (const char *fname)
srcdir = ".";
buf = malloc (strlen(srcdir) + strlen(fname) + 2);
if (!buf)
- exit (8);
+ {
+ fprintf (stderr, "%s:%d: could not allocate string: %s\n",
+ __FILE__, __LINE__, strerror (errno));
+ exit (8);
+ }
strcpy (buf, srcdir);
strcat (buf, "/");
strcat (buf, fname);
@@ -116,17 +120,23 @@ make_filename (const char *fname)
void
-init_gpgme (gpgme_protocol_t proto)
+init_gpgme_basic (void)
{
- gpgme_error_t err;
-
gpgme_check_version (NULL);
setlocale (LC_ALL, "");
gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
#ifndef HAVE_W32_SYSTEM
gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
#endif
+}
+
+
+void
+init_gpgme (gpgme_protocol_t proto)
+{
+ gpg_error_t err;
+ init_gpgme_basic ();
err = gpgme_engine_check_version (proto);
fail_if_err (err);
}
diff --git a/tests/t-data.c b/tests/t-data.c
index fe2d59e..c214de7 100644
--- a/tests/t-data.c
+++ b/tests/t-data.c
@@ -30,8 +30,10 @@
#include <string.h>
#include <errno.h>
-#include <gpgme.h>
+#define PGM "t-data"
+#include "run-support.h"
+#undef fail_if_err
#define fail_if_err(a) do { if(a) { \
fprintf (stderr, "%s:%d: (%i) gpgme_error_t " \
"%s\n", __FILE__, __LINE__, round, \
@@ -39,27 +41,6 @@
exit (1); } \
} while(0)
-static char *
-make_filename (const char *fname)
-{
- const char *srcdir = getenv ("srcdir");
- char *buf;
-
- if (!srcdir)
- srcdir = ".";
- buf = malloc (strlen(srcdir) + strlen(fname) + 2 );
- if (!buf)
- {
- fprintf (stderr, "%s:%d: could not allocate string: %s\n",
- __FILE__, __LINE__, strerror (errno));
- exit (1);
- }
- strcpy (buf, srcdir);
- strcat (buf, "/");
- strcat (buf, fname);
- return buf;
-}
-
typedef enum
{
TEST_INITIALIZER,
@@ -203,6 +184,8 @@ main (void)
gpgme_error_t err = 0;
gpgme_data_t data;
+ init_gpgme_basic ();
+
while (++round)
{
switch (round)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gpgme.git
More information about the Pkg-gnupg-commit
mailing list