Simplify code
Signed-off-by: Gabor Mezei <gabor.mezei@arm.com>
diff --git a/library/bignum_core.c b/library/bignum_core.c
index 3e19ff4..a05df99 100644
--- a/library/bignum_core.c
+++ b/library/bignum_core.c
@@ -185,28 +185,27 @@
const unsigned char *buf,
size_t buflen )
{
- const size_t limbs = CHARS_TO_LIMBS( buflen );
+ size_t const limbs = CHARS_TO_LIMBS( buflen );
if( nx < limbs )
return( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL );
- if( X != NULL )
+ /* If nx is 0, buflen must also be 0 (from previous test). Nothing to do. */
+ if( nx == 0 )
+ return( 0 );
+
+ memset( X, 0, nx * ciL );
+
+ /* memcpy() with (NULL, 0) is undefined behaviour */
+ if( buflen != 0 )
{
- memset( X, 0, nx * ciL );
-
- const size_t overhead = ( nx * ciL ) - buflen;
-
- /* Avoid calling `memcpy` with NULL source or destination argument,
- * even if buflen is 0. */
- if( buf != NULL )
- {
- unsigned char *Xp = (unsigned char *) X;
- memcpy( Xp + overhead, buf, buflen );
-
- mbedtls_mpi_core_bigendian_to_host( X, nx );
- }
+ size_t overhead = ( nx * ciL ) - buflen;
+ unsigned char *Xp = (unsigned char *) X;
+ memcpy( Xp + overhead, buf, buflen );
}
+ mbedtls_mpi_core_bigendian_to_host( X, nx );
+
return( 0 );
}
diff --git a/library/bignum_core.h b/library/bignum_core.h
index 117c3c5..397f79a 100644
--- a/library/bignum_core.h
+++ b/library/bignum_core.h
@@ -85,8 +85,10 @@
* most significant zero bytes in the input).
*
* \param X The address of the MPI.
+ * May only be #NULL if \nx is 0 and \p buflen is 0.
* \param nx The number of limbs of \p X.
* \param buf The input buffer to import from.
+ * May only be #NULL if \p buflen is 0.
* \param buflen The length in bytes of \p buf.
*
* \return \c 0 if successful.