From 8c433eed8bfd4a3b92c09bc1d927b7991084068d Mon Sep 17 00:00:00 2001 From: Nickolay Olshevsky Date: Fri, 2 Feb 2024 13:44:03 +0200 Subject: [PATCH] Update test for rnp_locate_key() with some edge cases and fix possible issue with hex decoding. --- src/lib/crypto/mem_ossl.cpp | 3 ++- src/tests/ffi.cpp | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/lib/crypto/mem_ossl.cpp b/src/lib/crypto/mem_ossl.cpp index 875aa1773b..648b61a984 100644 --- a/src/lib/crypto/mem_ossl.cpp +++ b/src/lib/crypto/mem_ossl.cpp @@ -93,7 +93,8 @@ hex_decode(const char *hex, uint8_t *buf, size_t buf_len) hex++; continue; } - if (hexlen < 2) { + /* We assume that spaces/tabs divide hex string between even groups of hex chars */ + if (hex + 2 > end) { RNP_LOG("Invalid hex string length."); return 0; } diff --git a/src/tests/ffi.cpp b/src/tests/ffi.cpp index 0eee2f6e8f..14629660a0 100644 --- a/src/tests/ffi.cpp +++ b/src/tests/ffi.cpp @@ -1457,6 +1457,25 @@ TEST_F(rnp_tests, test_ffi_locate_key) // load our keyrings assert_true(load_keys_gpg(ffi, "data/keyrings/1/pubring.gpg")); + // edge cases + { + rnp_key_handle_t key = NULL; + assert_rnp_failure(rnp_locate_key(NULL, "keyid", "7BC6709B15C23A4A", &key)); + assert_rnp_failure(rnp_locate_key(ffi, NULL, "7BC6709B15C23A4A", &key)); + assert_rnp_failure(rnp_locate_key(ffi, "keyid", NULL, &key)); + assert_rnp_failure(rnp_locate_key(ffi, "keyid", "7BC6709B15C23A4A", NULL)); + assert_rnp_failure(rnp_locate_key(ffi, "wrong", "7BC6709B15C23A4A", &key)); + assert_rnp_failure(rnp_locate_key(ffi, "keyid", "BC6709B15C23A4A", &key)); + assert_rnp_failure(rnp_locate_key(ffi, "keyid", "C6709B15C23A4A", &key)); + assert_rnp_failure( + rnp_locate_key(ffi, "fingerprint", "5A3CBF583AA80A2CCC53AA7BC6709B15C23A4A", &key)); + assert_rnp_failure( + rnp_locate_key(ffi, "grip", "D6A0800A3FACDE0C0EB60B16B3669ED380FDFA", &key)); + assert_rnp_failure(rnp_locate_key(ffi, "keyid", "0x7BC6 709B\r15C2 3A4A\n", &key)); + assert_rnp_success(rnp_locate_key(ffi, "keyid", "0x7BC6 709B\t15C2 3A4A\t", &key)); + assert_non_null(key); + rnp_key_handle_destroy(key); + } // keyid { static const char *ids[] = {"7BC6709B15C23A4A",