From 30f92eab92e0ecfdffe95dc273a4398cea53b60c Mon Sep 17 00:00:00 2001 From: tolga-tom-nook Date: Mon, 25 May 2026 05:17:19 +0000 Subject: [PATCH 1/2] fix: reject mixed-case bech32 addresses --- dist/functions/address.js | 1 + src/functions/address.js | 1 + test/jsbgl.test.js | 2 ++ 3 files changed, 4 insertions(+) diff --git a/dist/functions/address.js b/dist/functions/address.js index 9c287f6..2dbb56a 100644 --- a/dist/functions/address.js +++ b/dist/functions/address.js @@ -183,6 +183,7 @@ module.exports = function (S) { return checksum.equals(verifyChecksum); } else { var prefix, payload; + if (address !== address.toLowerCase() && address !== address.toUpperCase()) return false; if ([S.TESTNET_SEGWIT_ADDRESS_PREFIX, S.MAINNET_SEGWIT_ADDRESS_PREFIX].includes(address.split("1")[0].toLowerCase())) { if (address.length !== 43 && address.length !== 63 && address.length !== 44 && address.length !== 64) return false; diff --git a/src/functions/address.js b/src/functions/address.js index b23391b..ded0e5c 100644 --- a/src/functions/address.js +++ b/src/functions/address.js @@ -205,6 +205,7 @@ module.exports = function (S) { } else { let prefix, payload; + if (address !== address.toLowerCase() && address !== address.toUpperCase()) return false; if ([S.TESTNET_SEGWIT_ADDRESS_PREFIX, S.MAINNET_SEGWIT_ADDRESS_PREFIX].includes(address.split("1")[0].toLowerCase())) { if (address.length !== 43 && address.length !== 63 && address.length !== 44 && address.length !== 64) return false; diff --git a/test/jsbgl.test.js b/test/jsbgl.test.js index 30834cc..7ca0f4a 100644 --- a/test/jsbgl.test.js +++ b/test/jsbgl.test.js @@ -842,6 +842,8 @@ describe(`${(browser) ? 'Browser' : 'Node'} test jsbgl library`, function () { it('isAddressValid', () => { equal(isAddressValid("bgl1qw508d6qejxtdg4y5r3zarvary0c5xw7k0fy5a3"), true); + equal(isAddressValid("BGL1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7K0FY5A3"), true); + equal(isAddressValid("Bgl1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7K0FY5A3"), false); equal(isAddressValid("tbgl1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx", {testnet: true}), true); equal(isAddressValid("tbgl1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx"), false); // equal(isAddressValid("bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3"), true); From 8074a865d59abd2ba7a9ef5a8a133fb1ba2038f6 Mon Sep 17 00:00:00 2001 From: tolga-tom-nook Date: Sun, 31 May 2026 11:43:46 +0000 Subject: [PATCH 2/2] test: cover testnet bech32 mixed-case rejection --- test/jsbgl.test.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/jsbgl.test.js b/test/jsbgl.test.js index 7ca0f4a..41dfa08 100644 --- a/test/jsbgl.test.js +++ b/test/jsbgl.test.js @@ -845,6 +845,8 @@ describe(`${(browser) ? 'Browser' : 'Node'} test jsbgl library`, function () { equal(isAddressValid("BGL1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7K0FY5A3"), true); equal(isAddressValid("Bgl1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7K0FY5A3"), false); equal(isAddressValid("tbgl1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx", {testnet: true}), true); + equal(isAddressValid("TBGL1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KXPJZSX", {testnet: true}), true); + equal(isAddressValid("Tbgl1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KXPJZSX", {testnet: true}), false); equal(isAddressValid("tbgl1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx"), false); // equal(isAddressValid("bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3"), true); // equal(isAddressValid("tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7", {testnet: true}), true);