Page MenuHome GnuPG

D241.id1069.diff
No OneTemporary

D241.id1069.diff

Index: b/cipher/primegen.c
===================================================================
--- b/cipher/primegen.c
+++ b/cipher/primegen.c
@@ -639,14 +639,15 @@
if (g)
{
/* Create a generator (start with 3). */
- gcry_mpi_t tmp = mpi_alloc (mpi_get_nlimbs (prime));
- gcry_mpi_t b = mpi_alloc (mpi_get_nlimbs (prime));
- gcry_mpi_t pmin1 = mpi_alloc (mpi_get_nlimbs (prime));
if (need_q_factor)
err = GPG_ERR_NOT_IMPLEMENTED;
else
{
+ gcry_mpi_t tmp = mpi_alloc (mpi_get_nlimbs (prime));
+ gcry_mpi_t b = mpi_alloc (mpi_get_nlimbs (prime));
+ gcry_mpi_t pmin1 = mpi_alloc (mpi_get_nlimbs (prime));
+
factors[n] = q;
factors[n + 1] = mpi_alloc_set_ui (2);
mpi_sub_ui (pmin1, prime, 1);
@@ -1208,17 +1209,25 @@
gcry_mpi_t b = mpi_new (0);
gcry_mpi_t pmin1 = mpi_new (0);
gcry_mpi_t g = start_g? mpi_copy (start_g) : mpi_set_ui (NULL, 3);
+ gcry_err_code_t err = 0;
int first = 1;
int i, n;
if (!factors || !r_g || !prime)
- return GPG_ERR_INV_ARG;
+ {
+ err= GPG_ERR_INV_ARG;
+ goto leave;
+ }
+
*r_g = NULL;
for (n=0; factors[n]; n++)
;
if (n < 2)
- return GPG_ERR_INV_ARG;
+ {
+ err= GPG_ERR_INV_ARG;
+ goto leave;
+ }
/* Extra sanity check - usually disabled. */
/* mpi_set (tmp, factors[0]); */
@@ -1253,9 +1262,18 @@
}
while (i < n);
+leave:
_gcry_mpi_release (tmp);
_gcry_mpi_release (b);
_gcry_mpi_release (pmin1);
+
+ if (err)
+ {
+ _gcry_mpi_release (g);
+ return err;
+
+ }
+
*r_g = g;
return 0;

File Metadata

Mime Type
text/plain
Expires
Sun, May 11, 6:34 PM (11 h, 27 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
df/a4/f0820f3bdb134c9458be02147540

Event Timeline