From 23ada61d85bd6851ce31cf33b2dfb090ca6ef91f Mon Sep 17 00:00:00 2001 From: ara-stock <226676426+ara-stock@users.noreply.github.com> Date: Sat, 10 Oct 2026 20:04:21 +0900 Subject: [PATCH 1/2] fix(token): return an error from get_spl_account on short account data Co-Authored-By: Claude Opus 5.5 --- crates/token/src/lib.rs | 13 +++++-------- crates/token/tests/one_owner.rs | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/crates/token/src/lib.rs b/crates/token/src/lib.rs index b21167fa..cd7c705f 100644 --- a/crates/token/src/lib.rs +++ b/crates/token/src/lib.rs @@ -49,14 +49,11 @@ pub fn get_spl_account( svm: &LiteSVM, account: &Address, ) -> Result { - let account = T::unpack( - &svm.get_account(account) - .ok_or(FailedTransactionMetadata { - err: TransactionError::AccountNotFound, - meta: Default::default(), - })? - .data[..T::LEN], - )?; + let account = svm.get_account(account).ok_or(FailedTransactionMetadata { + err: TransactionError::AccountNotFound, + meta: Default::default(), + })?; + let account = T::unpack(account.data.get(..T::LEN).unwrap_or(&account.data))?; Ok(account) } diff --git a/crates/token/tests/one_owner.rs b/crates/token/tests/one_owner.rs index cb69658e..37afcfc4 100644 --- a/crates/token/tests/one_owner.rs +++ b/crates/token/tests/one_owner.rs @@ -192,3 +192,23 @@ fn test_with_account_keypair() { let token_account: Account = get_spl_account(svm, &returned_pk).unwrap(); assert_eq!(token_account.state, AccountState::Initialized); } + +#[test] +fn test_get_spl_account_with_short_data() { + let svm = &mut LiteSVM::new(); + let payer_kp = Keypair::new(); + let payer_pk = payer_kp.pubkey(); + svm.airdrop(&payer_pk, 10_000_000_000).unwrap(); + + let mint_pk = CreateMint::new(svm, &payer_kp).send().unwrap(); + + assert!(get_spl_account::(svm, &mint_pk).is_err()); + assert!(get_spl_account::(svm, &payer_pk).is_err()); + + let destination_pk = Keypair::new().pubkey(); + assert!( + TransferChecked::new(svm, &payer_kp, &payer_pk, &destination_pk, 1) + .send() + .is_err() + ); +} From d5fde4fee0020f09c1a34ea7f252ddb9a20cb08c Mon Sep 17 00:00:00 2001 From: ara-stock <226676426+ara-stock@users.noreply.github.com> Date: Sat, 10 Oct 2026 20:04:54 +0900 Subject: [PATCH 2/2] chore: add changelog entry for #433 Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4bf872d..ea0bddf9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Return an error instead of panicking from `litesvm_token::get_spl_account` (and the `*Checked` token helpers that read the mint through it) when the account data is shorter than the requested state ([#433](https://github.com/LiteSVM/litesvm/pull/433)). + ## [0.18.0] - 2026-10-09 ### Added