Skip to content

Commit 8b9532c

Browse files
committed
Add debug for android crash
1 parent 820cb53 commit 8b9532c

2 files changed

Lines changed: 47 additions & 2 deletions

File tree

.github/workflows/stable-wolfssl-releases.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ jobs:
3131
strategy:
3232
fail-fast: false
3333
matrix:
34-
wolfssl_version: crl-generation
34+
# Test against CRL generation PR
35+
# TODO: Switch back to wolfssl/wolfssl after merge
36+
wolfssl_version: [ 'crl-generation' ]
3537
jdk_version: [ '21' ]
3638
wolfssl_configure: [ '--enable-jni', '--enable-jni --enable-all' ]
3739
name: wolfSSL ${{ matrix.wolfssl_version }} (JDK ${{ matrix.jdk_version }}, ${{ matrix.wolfssl_configure }})

native/com_wolfssl_WolfSSLCRL.c

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,13 +362,19 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCRL_X509_1CRL_1sign
362362
return WOLFSSL_FAILURE;
363363
}
364364

365-
keyBuf = (byte*)(*jenv)->GetByteArrayElements(jenv, keyBytes, NULL);
365+
jboolean isCopy = JNI_FALSE;
366+
keyBuf = (byte*)(*jenv)->GetByteArrayElements(jenv, keyBytes, &isCopy);
366367
if ((*jenv)->ExceptionOccurred(jenv)) {
367368
(*jenv)->ExceptionClear(jenv);
368369
return WOLFSSL_FAILURE;
369370
}
370371
keySz = (*jenv)->GetArrayLength(jenv, keyBytes);
371372

373+
/* Debug: Log buffer information */
374+
fprintf(stderr, "[CRL_sign] DEBUG: keyBuf=%p, keySz=%d, keyBytes=%p, isCopy=%s\n",
375+
(void*)keyBuf, keySz, (void*)keyBytes,
376+
(isCopy == JNI_TRUE) ? "TRUE (copy)" : "FALSE (direct pointer)");
377+
372378
if (keyBuf == NULL || keySz == 0) {
373379
ret = WOLFSSL_FAILURE;
374380
}
@@ -399,6 +405,8 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCRL_X509_1CRL_1sign
399405
derBuf = keyBuf;
400406
derSz = keySz;
401407
ret = WOLFSSL_SUCCESS;
408+
fprintf(stderr, "[CRL_sign] DEBUG: DER format - derBuf=%p (same as keyBuf=%p), derSz=%d\n",
409+
(void*)derBuf, (void*)keyBuf, derSz);
402410
}
403411
else {
404412
/* get needed buffer size */
@@ -433,39 +441,74 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLCRL_X509_1CRL_1sign
433441
if (ret == WOLFSSL_SUCCESS) {
434442
/* Use temp pointer since d2i_PrivateKey() modifies the buffer */
435443
rsaPrivBuf = derBuf;
444+
445+
/* Debug: Save first few bytes to check if buffer is modified */
446+
byte debugFirstBytes[4] = {0};
447+
if (derSz >= 4) {
448+
XMEMCPY(debugFirstBytes, derBuf, 4);
449+
}
450+
451+
fprintf(stderr, "[CRL_sign] DEBUG: Before d2i_PrivateKey - rsaPrivBuf=%p, derBuf=%p, keyBuf=%p, "
452+
"first bytes: %02x %02x %02x %02x\n",
453+
(void*)rsaPrivBuf, (void*)derBuf, (void*)keyBuf,
454+
debugFirstBytes[0], debugFirstBytes[1], debugFirstBytes[2], debugFirstBytes[3]);
436455

437456
priv = wolfSSL_d2i_PrivateKey((int)keyType, NULL,
438457
(const unsigned char**)&rsaPrivBuf, derSz);
458+
459+
/* Debug: Check if buffer contents changed */
460+
byte debugAfterBytes[4] = {0};
461+
if (derSz >= 4 && derBuf != NULL) {
462+
XMEMCPY(debugAfterBytes, derBuf, 4);
463+
}
464+
465+
fprintf(stderr, "[CRL_sign] DEBUG: After d2i_PrivateKey - rsaPrivBuf=%p (modified), derBuf=%p, keyBuf=%p, priv=%p, "
466+
"first bytes after: %02x %02x %02x %02x\n",
467+
(void*)rsaPrivBuf, (void*)derBuf, (void*)keyBuf, (void*)priv,
468+
debugAfterBytes[0], debugAfterBytes[1], debugAfterBytes[2], debugAfterBytes[3]);
469+
439470
if (priv == NULL) {
471+
fprintf(stderr, "[CRL_sign] DEBUG: d2i_PrivateKey returned NULL\n");
440472
ret = WOLFSSL_FAILURE;
441473
}
442474
}
443475

444476
/* sign WOLFSSL_X509_CRL with WOLFSSL_EVP_PKEY, returns size of signature
445477
* on success or negative on error */
446478
if (ret == WOLFSSL_SUCCESS) {
479+
fprintf(stderr, "[CRL_sign] DEBUG: Calling wolfSSL_X509_CRL_sign - crl=%p, priv=%p, md=%p\n",
480+
(void*)crl, (void*)priv, (void*)md);
447481
ret = wolfSSL_X509_CRL_sign(crl, priv, md);
482+
fprintf(stderr, "[CRL_sign] DEBUG: wolfSSL_X509_CRL_sign returned %d\n", ret);
448483
if (ret >= 0) {
449484
ret = WOLFSSL_SUCCESS;
450485
}
451486
}
452487

488+
fprintf(stderr, "[CRL_sign] DEBUG: Cleanup - ret=%d, priv=%p, derBuf=%p, keyBuf=%p\n",
489+
ret, (void*)priv, (void*)derBuf, (void*)keyBuf);
490+
453491
if (priv != NULL) {
454492
wolfSSL_EVP_PKEY_free(priv);
455493
}
456494
if (derBuf != NULL && derBuf != keyBuf) {
495+
fprintf(stderr, "[CRL_sign] DEBUG: Freeing derBuf (allocated)\n");
457496
XMEMSET(derBuf, 0, derSz);
458497
XFREE(derBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER);
459498
derBuf = NULL;
499+
} else {
500+
fprintf(stderr, "[CRL_sign] DEBUG: Not freeing derBuf (points to keyBuf)\n");
460501
}
461502
if (mdName != NULL) {
462503
(*jenv)->ReleaseStringUTFChars(jenv, digestAlg, mdName);
463504
}
464505
if (keyBuf != NULL) {
506+
fprintf(stderr, "[CRL_sign] DEBUG: Releasing keyBuf\n");
465507
(*jenv)->ReleaseByteArrayElements(jenv, keyBytes, (jbyte*)keyBuf,
466508
JNI_ABORT);
467509
}
468510

511+
fprintf(stderr, "[CRL_sign] DEBUG: Returning %d\n", ret);
469512
return ret;
470513
#else
471514
(void)jenv;

0 commit comments

Comments
 (0)