]> git.codecow.com Git - libnemo.git/commitdiff
Improve block link validation.
authorChris Duncan <chris@codecow.com>
Mon, 3 Aug 2026 20:13:42 +0000 (13:13 -0700)
committerChris Duncan <chris@codecow.com>
Mon, 3 Aug 2026 20:13:42 +0000 (13:13 -0700)
src/lib/block/receive.ts
src/lib/block/send.ts

index 89044cd72907f3300e2d852a064fdfbabc5ed0e1..99ca1ea08164a33fea9363b225c12b4c016ca776 100644 (file)
@@ -33,12 +33,13 @@ export function _receive (block: Block, sendBlock: unknown, amount: unknown, uni
                }
                block.balance += convert(amount, unit, 'raw', 'bigint')
 
-               if (typeof sendBlock !== 'string' && !(sendBlock instanceof (block.constructor as typeof Block))) {
-                       throw new TypeError('Invalid send block')
+               if (sendBlock instanceof (block.constructor as typeof Block)) {
+                       sendBlock = sendBlock.hash
                }
-               block.link = (typeof sendBlock === 'string')
-                       ? hex.toBytes(sendBlock)
-                       : hex.toBytes(sendBlock.hash)
+               if (typeof sendBlock !== 'string' || sendBlock.length !== 64) {
+                       throw new TypeError('Invalid send block hash', { cause: sendBlock })
+               }
+               block.link = hex.toBytes(sendBlock, 32)
 
                return block
        } catch (err) {
index 5d42a761da2737f3d42eab0b6543646b832b6e78..54634def674d7131d297bf8431bffcb4bcebddd4 100644 (file)
@@ -36,12 +36,13 @@ export function _send (block: Block, account: unknown, amount: unknown, unit: un
                        throw new RangeError('Insufficient funds', { cause: block.balance })
                }
 
-               if (typeof account !== 'string' && !(account instanceof Account)) {
+               if (typeof account === 'string') {
+                       account = new Account(account)
+               }
+               if (!(account instanceof Account)) {
                        throw new TypeError('Invalid account', { cause: account })
                }
-               block.link = (typeof account === 'string')
-                       ? hex.toBytes(new Account(account).publicKey)
-                       : hex.toBytes(account.publicKey)
+               block.link = hex.toBytes(account.publicKey, 32)
 
                return block
        } catch (err) {