@@ -157,31 +157,33 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Ecc_wc_1ecc_1make_1key_1ex
157157 int ret = 0 ;
158158 ecc_key * ecc = NULL ;
159159 RNG * rng = NULL ;
160- const char * name = ( * env ) -> GetStringUTFChars ( env , curveName , 0 ) ;
160+ const char * name ;
161161
162162 ecc = (ecc_key * ) getNativeStruct (env , this );
163163 if ((* env )-> ExceptionOccurred (env )) {
164164 /* getNativeStruct may throw exception, prevent throwing another */
165- (* env )-> ReleaseStringUTFChars (env , curveName , name );
166165 return ;
167166 }
168167
169168 rng = (RNG * ) getNativeStruct (env , rng_object );
170169 if ((* env )-> ExceptionOccurred (env )) {
171170 /* getNativeStruct may throw exception, prevent throwing another */
172- (* env )-> ReleaseStringUTFChars (env , curveName , name );
173171 return ;
174172 }
175173
176- if (ecc == NULL || rng == NULL || curveName == NULL || name == NULL ) {
174+ if (ecc == NULL || rng == NULL || curveName == NULL ) {
177175 ret = BAD_FUNC_ARG ;
178176 }
179177
180178 if (ret == 0 ) {
181- ret = wc_ecc_get_curve_id_from_name (name );
179+ name = (* env )-> GetStringUTFChars (env , curveName , 0 );
180+ if (name == NULL ) {
181+ ret = BAD_FUNC_ARG ;
182+ }
182183 }
183184
184- if (name != NULL ) {
185+ if (ret == 0 ) {
186+ ret = wc_ecc_get_curve_id_from_name (name );
185187 (* env )-> ReleaseStringUTFChars (env , curveName , name );
186188 }
187189
@@ -264,10 +266,17 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Ecc_wc_1ecc_1import_1private
264266
265267 if (ret == 0 ) {
266268 /* detect, and later skip, leading zero byte */
267- if (priv [0 ] == 0 ) {
269+ if (( privSz > 0 ) && ( priv [0 ] == 0 ) ) {
268270 idx = 1 ;
269271 }
270272
273+ /* sanity check privSz is big enough to read to idx */
274+ if (privSz <= idx ) {
275+ ret = BAD_FUNC_ARG ;
276+ }
277+ }
278+
279+ if (ret == 0 ) {
271280 if (curveName != NULL ) {
272281 name = (* env )-> GetStringUTFChars (env , curveName , 0 );
273282 ret = wc_ecc_get_curve_id_from_name (name );
@@ -333,7 +342,7 @@ Java_com_wolfssl_wolfcrypt_Ecc_wc_1ecc_1export_1private(
333342 ret = MEMORY_E ;
334343 }
335344 else {
336- XMEMSET (output , 0 , sizeof ( outputSz ) );
345+ XMEMSET (output , 0 , outputSz );
337346 }
338347 }
339348
@@ -1017,9 +1026,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_Ecc_wc_1ecc_1private_1ke
10171026 byte * pkcs8 = NULL ;
10181027 word32 derKeySz = MAX_ECC_PRIVATE_DER_SZ ;
10191028 word32 pkcs8Sz = 0 ;
1020-
10211029 word32 derKeyBufSz = 0 ;
1022- word32 pkcs8BufSz = 0 ;
10231030
10241031 int algoID = ECDSAk ;
10251032 word32 oidSz = 0 ;
@@ -1113,7 +1120,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_Ecc_wc_1ecc_1private_1ke
11131120 XFREE (derKey , NULL , DYNAMIC_TYPE_TMP_BUFFER );
11141121 }
11151122 if (pkcs8 != NULL ) {
1116- XMEMSET (pkcs8 , 0 , pkcs8BufSz );
1123+ XMEMSET (pkcs8 , 0 , pkcs8Sz );
11171124 XFREE (pkcs8 , NULL , DYNAMIC_TYPE_TMP_BUFFER );
11181125 }
11191126
0 commit comments