From d3386318ee15cc80737be4ae56802963f664db51 Mon Sep 17 00:00:00 2001 From: ananas-block Date: Thu, 5 Feb 2026 02:04:09 +0100 Subject: [PATCH 1/3] chore: reject compress for mints with restricted extensions in mint check --- .../compressed_token/transfer2/check_extensions.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs b/programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs index 083489c32b..c54bce4d0e 100644 --- a/programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs +++ b/programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs @@ -118,10 +118,10 @@ pub fn build_mint_extension_cache<'a>( // SAFETY: mint_index was just inserted above if not already present let checks = cache.get_by_key(&mint_index).unwrap(); - // CompressAndClose with restricted extensions requires CompressedOnly output. - // Compress/Decompress don't need additional validation here: - // - Compress: blocked by check_mint_extensions when outputs exist - // - Decompress: no check it restores existing state + // Restricted extensions handling: + // - CompressAndClose: requires CompressedOnly output to preserve extension state + // - Compress: blocked - cannot compress tokens with restricted extensions + // - Decompress: allowed - restores existing state if checks.has_restricted_extensions && compression.mode.is_compress_and_close() { let output_idx = compression.get_compressed_token_account_index()?; let has_compressed_only = inputs @@ -137,6 +137,9 @@ pub fn build_mint_extension_cache<'a>( msg!("Mint has restricted extensions - CompressedOnly output required"); return Err(ErrorCode::CompressAndCloseMissingCompressedOnlyExtension.into()); } + } else if checks.has_restricted_extensions && compression.mode.is_compress() { + msg!("Mint has restricted extensions - regular compress not allowed"); + return Err(ErrorCode::MintHasRestrictedExtensions.into()); } } } From 1e38efb7bc6fe75e58b09840b586fd1513d8b70e Mon Sep 17 00:00:00 2001 From: ananas-block <58553958+ananas-block@users.noreply.github.com> Date: Fri, 6 Feb 2026 08:48:17 +0100 Subject: [PATCH 2/3] Update programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs Co-authored-by: 0xa5df-c <172008956+0xa5df-c@users.noreply.github.com> --- .../program/src/compressed_token/transfer2/check_extensions.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs b/programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs index c54bce4d0e..474b9a12cf 100644 --- a/programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs +++ b/programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs @@ -137,7 +137,7 @@ pub fn build_mint_extension_cache<'a>( msg!("Mint has restricted extensions - CompressedOnly output required"); return Err(ErrorCode::CompressAndCloseMissingCompressedOnlyExtension.into()); } - } else if checks.has_restricted_extensions && compression.mode.is_compress() { + } else if checks.has_restricted_extensions && deny_restricted_extensions && !compression.mode.is_compress_and_close() { msg!("Mint has restricted extensions - regular compress not allowed"); return Err(ErrorCode::MintHasRestrictedExtensions.into()); } From d70575f01c84a06049d11c01b278da20612d821d Mon Sep 17 00:00:00 2001 From: ananas-block Date: Mon, 9 Feb 2026 14:10:49 +0100 Subject: [PATCH 3/3] fix: format else-if condition for lint --- .../src/compressed_token/transfer2/check_extensions.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs b/programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs index 474b9a12cf..39dde37cc0 100644 --- a/programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs +++ b/programs/compressed-token/program/src/compressed_token/transfer2/check_extensions.rs @@ -137,7 +137,10 @@ pub fn build_mint_extension_cache<'a>( msg!("Mint has restricted extensions - CompressedOnly output required"); return Err(ErrorCode::CompressAndCloseMissingCompressedOnlyExtension.into()); } - } else if checks.has_restricted_extensions && deny_restricted_extensions && !compression.mode.is_compress_and_close() { + } else if checks.has_restricted_extensions + && deny_restricted_extensions + && !compression.mode.is_compress_and_close() + { msg!("Mint has restricted extensions - regular compress not allowed"); return Err(ErrorCode::MintHasRestrictedExtensions.into()); }