Add validation to reject invisible/zero-width characters in SecretProviderClass configuration #1905
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR addresses a critical debugging issue where invisible Unicode characters in SecretProviderClass YAML configurations can cause difficult-to-diagnose failures. As reported in the issue, users have experienced multi-day debugging sessions trying to identify why seemingly valid configurations don't work.
Problem
When invisible characters like Zero Width Space (U+200B) are accidentally included in SecretProviderClass YAML files, they create configuration strings that:
For example, these two object names look identical but behave differently:
Solution
Added comprehensive validation to detect invisible/zero-width Unicode characters in all KeyVaultObject string fields during the validation phase. The implementation:
New validation function
validateNoInvisibleCharacters()
that detects:Integration into the existing
validate()
function to check all KeyVaultObject fields:objectName
,objectAlias
,objectVersion
,objectType
,objectFormat
,objectEncoding
,filePermission
Clear error messages that identify exactly which field contains an invisible character and its position:
Testing
This change prevents the multi-day debugging scenarios described in the issue by providing immediate, actionable feedback when invisible characters are detected.
Fixes #1544.
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
testKV.vault.azure.net
/tmp/go-build1738392051/b501/provider.test -test.paniconexit0 -test.gocoverdir=/tmp/go-build1738392051/b501/gocoverdir -test.timeout=10m0s -test.coverprofile=/tmp/go-build1738392051/b501/_cover_.out -test.v=true
(dns block)/tmp/go-build3950577698/b001/provider.test -test.testlogfile=/tmp/go-build3950577698/b001/testlog.txt -test.paniconexit0 -test.timeout=10m0s -test.v=true
(dns block)/tmp/go-build2308977073/b501/provider.test -test.paniconexit0 -test.gocoverdir=/tmp/go-build2308977073/b501/gocoverdir -test.timeout=10m0s -test.coverprofile=/tmp/go-build2308977073/b501/_cover_.out -test.v=true
(dns block)If you need me to access, download, or install something from one of these locations, you can either:
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.