summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2015-04-13 11:48:33 +0200
committerWerner Koch <wk@gnupg.org>2015-04-13 11:48:33 +0200
commit9fca46864e1b5a9c788072113589454adb89fa97 (patch)
tree4d6a892bade0bfb60be9bedbde2f67f477817d9d
parent6e31a2805c5e808fe50a0c2529823f6501db2d38 (diff)
downloadlibgcrypt-9fca46864e1b5a9c788072113589454adb89fa97.tar.gz
mpi: Fix gcry_mpi_copy for NULL opaque data.
* mpi/mpiutil.c (_gcry_mpi_copy): Copy opaque only if needed. -- gcry_mpi_set_opaque allows to store NULL as opaque data. Thus we also need to take care when copying such data. Signed-off-by: Werner Koch <wk@gnupg.org>
-rw-r--r--mpi/mpiutil.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/mpi/mpiutil.c b/mpi/mpiutil.c
index fbbd3b47..71b3f1c3 100644
--- a/mpi/mpiutil.c
+++ b/mpi/mpiutil.c
@@ -343,7 +343,8 @@ _gcry_mpi_copy (gcry_mpi_t a)
if( a && (a->flags & 4) ) {
void *p = _gcry_is_secure(a->d)? xmalloc_secure ((a->sign+7)/8)
: xmalloc ((a->sign+7)/8);
- memcpy( p, a->d, (a->sign+7)/8 );
+ if (a->d)
+ memcpy( p, a->d, (a->sign+7)/8 );
b = mpi_set_opaque( NULL, p, a->sign );
b->flags &= ~(16|32); /* Reset the immutable and constant flags. */
}