From 34db285ac3778b6db0e97206f860771bf4da7ccc Mon Sep 17 00:00:00 2001 From: Ivan Schasny Date: Wed, 6 Nov 2019 13:12:16 +0000 Subject: [PATCH] CORDA-3396 fixed NPE in BlobInspector. Added verbose message in the case of error. --- .../net/corda/client/jackson/JacksonSupport.kt | 2 +- .../net/corda/client/jackson/JacksonSupportTest.kt | 13 +++++++++---- .../kotlin/net/corda/blobinspector/BlobInspector.kt | 5 +++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/client/jackson/src/main/kotlin/net/corda/client/jackson/JacksonSupport.kt b/client/jackson/src/main/kotlin/net/corda/client/jackson/JacksonSupport.kt index a88e4d97ab..5cd84f1ad0 100644 --- a/client/jackson/src/main/kotlin/net/corda/client/jackson/JacksonSupport.kt +++ b/client/jackson/src/main/kotlin/net/corda/client/jackson/JacksonSupport.kt @@ -252,7 +252,7 @@ object JacksonSupport { writeObjectField("issuerUniqueID", value.issuerUniqueID) writeObjectField("subjectUniqueID", value.subjectUniqueID) writeObjectField("keyUsage", value.keyUsage?.asList()?.mapIndexedNotNull { i, flag -> if (flag) keyUsages[i] else null }) - writeObjectField("extendedKeyUsage", value.extendedKeyUsage.map { keyPurposeIds[it] ?: it }) + writeObjectField("extendedKeyUsage", value.extendedKeyUsage?.map { keyPurposeIds[it] ?: it }) jsonObject("basicConstraints") { val isCa = value.basicConstraints != -1 writeBooleanField("isCA", isCa) diff --git a/client/jackson/src/test/kotlin/net/corda/client/jackson/JacksonSupportTest.kt b/client/jackson/src/test/kotlin/net/corda/client/jackson/JacksonSupportTest.kt index 8f71de6b5d..ab1f09e81a 100644 --- a/client/jackson/src/test/kotlin/net/corda/client/jackson/JacksonSupportTest.kt +++ b/client/jackson/src/test/kotlin/net/corda/client/jackson/JacksonSupportTest.kt @@ -8,10 +8,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode import com.fasterxml.jackson.databind.node.TextNode import com.fasterxml.jackson.dataformat.yaml.YAMLFactory import com.fasterxml.jackson.module.kotlin.convertValue -import com.nhaarman.mockito_kotlin.any -import com.nhaarman.mockito_kotlin.doReturn -import com.nhaarman.mockito_kotlin.mock -import com.nhaarman.mockito_kotlin.whenever +import com.nhaarman.mockito_kotlin.* import net.corda.client.jackson.internal.childrenAs import net.corda.client.jackson.internal.valueAs import net.corda.core.contracts.* @@ -638,6 +635,14 @@ class JacksonSupportTest(@Suppress("unused") private val name: String, factory: assertThat(json["encoded"].binaryValue()).isEqualTo(cert.encoded) } + @Test + fun `X509Certificate serialization when extendedKeyUsage is null`() { + val cert: X509Certificate = spy(MINI_CORP.identity.certificate) + whenever(cert.extendedKeyUsage).thenReturn(null) + // should work even if extendedKeyUsage is null + mapper.valueToTree(cert) + } + @Test fun `X509Certificate deserialization`() { val cert: X509Certificate = MINI_CORP.identity.certificate diff --git a/tools/blobinspector/src/main/kotlin/net/corda/blobinspector/BlobInspector.kt b/tools/blobinspector/src/main/kotlin/net/corda/blobinspector/BlobInspector.kt index d60cb31070..00b29d5ff5 100644 --- a/tools/blobinspector/src/main/kotlin/net/corda/blobinspector/BlobInspector.kt +++ b/tools/blobinspector/src/main/kotlin/net/corda/blobinspector/BlobInspector.kt @@ -79,6 +79,11 @@ class BlobInspector : CordaCliWrapper("blob-inspector", "Convert AMQP serialised mapper.writeValue(out, deserialized) ExitCodes.SUCCESS } catch (e: Exception) { + print("Unexpected exception: ${e.message}") + if (verbose) { + println() + e.printStackTrace(System.out) + } ExitCodes.FAILURE } finally { _contextSerializationEnv.set(null)