summaryrefslogtreecommitdiffstats
path: root/dirmngr/ks-engine-hkp.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2015-01-08 04:14:13 +0100
committerNIIBE Yutaka <gniibe@fsij.org>2015-01-08 04:14:13 +0100
commit657a26f3af1b3f817d6cde2d091273d332571247 (patch)
tree417cc85c3d817a2b9dad945bdc452bc19d323732 /dirmngr/ks-engine-hkp.c
parentscd: fix get_public_key for OpenPGPcard v1.0. (diff)
downloadgnupg2-657a26f3af1b3f817d6cde2d091273d332571247.tar.xz
gnupg2-657a26f3af1b3f817d6cde2d091273d332571247.zip
dirmngr: Fix error code path of map_host.
* dirmngr/ks-engine-hkp.c (map_host): Fix error return. -- In ks-engine-hkp.c on line 509 'reftbl' is freed, but it is then used on line 511. I'm guessing this is a missing return;. Reported-by: Joshua Rogers <honey@internot.info> Debian-Bug-Id: 773520 Other fixes on error added too.
Diffstat (limited to '')
-rw-r--r--dirmngr/ks-engine-hkp.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/dirmngr/ks-engine-hkp.c b/dirmngr/ks-engine-hkp.c
index 3c6a003f6..ea607cb93 100644
--- a/dirmngr/ks-engine-hkp.c
+++ b/dirmngr/ks-engine-hkp.c
@@ -325,6 +325,7 @@ static gpg_error_t
map_host (ctrl_t ctrl, const char *name, int force_reselect,
char **r_host, unsigned int *r_httpflags, char **r_poolname)
{
+ gpg_error_t err = 0;
hostinfo_t hi;
int idx;
@@ -361,8 +362,9 @@ map_host (ctrl_t ctrl, const char *name, int force_reselect,
idx = create_new_hostinfo (name);
if (idx == -1)
{
+ err = gpg_error_from_syserror ();
xfree (reftbl);
- return gpg_error_from_syserror ();
+ return err;
}
hi = hosttable[idx];
@@ -504,9 +506,11 @@ map_host (ctrl_t ctrl, const char *name, int force_reselect,
hi->pool = xtryrealloc (reftbl, (refidx+1) * sizeof *reftbl);
if (!hi->pool)
{
+ err = gpg_error_from_syserror ();
log_error ("shrinking index table in map_host failed: %s\n",
- strerror (errno));
+ gpg_strerror (err));
xfree (reftbl);
+ return err;
}
qsort (reftbl, refidx, sizeof *reftbl, sort_hostpool);
}
@@ -570,12 +574,13 @@ map_host (ctrl_t ctrl, const char *name, int force_reselect,
*r_host = xtrystrdup (hi->name);
if (!*r_host)
{
+ err = gpg_error_from_syserror ();
if (r_poolname)
{
xfree (*r_poolname);
*r_poolname = NULL;
}
- return gpg_error_from_syserror ();
+ return err;
}
return 0;
}