@@ -93,13 +93,13 @@ local_setup() {
9393    assert_line BAR=bar
9494}
9595
96- @test ' wildcard does only work  at the end  of the pattern'   {
96+ @test ' wildcard works  at the start  of the pattern'   {
9797    export  LIMA_SHELLENV_BLOCK=" *FOO" 
9898    export  FOO=foo
9999    export  BARFOO=barfoo
100100    run -0 limactl shell --preserve-env " $NAME "   printenv
101-     assert_line FOO=foo 
102-     assert_line BARFOO=barfoo 
101+     refute_line --regexp  ' ^BARFOO= ' 
102+     refute_line --regexp  ' ^FOO= ' 
103103}
104104
105105@test ' block list can use a , separated list with whitespace ignored'   {
@@ -114,16 +114,6 @@ local_setup() {
114114    assert_line BARBAZ=barbaz
115115}
116116
117- @test ' allow list overrides block list but blocks everything else'   {
118-     export  LIMA_SHELLENV_ALLOW=SSH_FOO
119-     export  SSH_FOO=ssh_foo
120-     export  SSH_BAR=ssh_bar
121-     export  BAR=bar
122-     run -0 limactl shell --preserve-env " $NAME "   printenv
123-     assert_line SSH_FOO=ssh_foo
124-     refute_line --regexp ' ^SSH_BAR=' 
125-     refute_line --regexp ' ^BAR=' 
126- }
127117
128118@test ' allow list can use a , separated list with whitespace ignored'   {
129119    export  LIMA_SHELLENV_ALLOW=" FOO*, , BAR" 
@@ -135,16 +125,93 @@ local_setup() {
135125    assert_line FOO=foo
136126    assert_line FOOBAR=foobar
137127    assert_line BAR=bar
138-     refute_line --regexp  ' ^ BARBAZ=' 
128+     assert_line  BARBAZ=barbaz 
139129}
140130
141- @test ' setting both allow list and block list generates a warning '   {
142-     export  LIMA_SHELLENV_ALLOW=FOO 
143-     export  LIMA_SHELLENV_BLOCK=BAR
131+ @test ' wildcard patterns work in all positions and combinations '   {
132+     #  Test wildcard at middle, and other combinations 
133+     export  LIMA_SHELLENV_BLOCK=" FOO* BAR,*FOO*BAR*,*TEST*,*SUFFIX " 
144134    export  FOO=foo
145-     run -0 --separate-stderr limactl shell --preserve-env " $NAME "   printenv FOO
146-     assert_output foo
147-     assert_stderr --regexp ' level=warning msg="Both LIMA_SHELLENV_BLOCK and LIMA_SHELLENV_ALLOW are set' 
135+     export  FOOBAR=foobar
136+     export  FOOXYZBAR=fooxyzbar
137+     export  FOOBAZ=foobaz
138+     export  BAZBAR=bazbar
139+     export  BAR=bar
140+     export  XFOOYBARZDOTCOM=xfooybarzdotcom
141+     export  PREFIX_TEST_VAR=prefix_test_var
142+     export  VAR_SUFFIX=var_suffix
143+     export  NORMAL_VAR=normal_var
144+     export  UNRELATED=unrelated
145+     run -0 limactl shell --preserve-env " $NAME "   printenv
146+     
147+     #  Should block FOO*BAR pattern
148+     refute_line --regexp ' ^FOOBAR=' 
149+     refute_line --regexp ' ^FOOXYZBAR=' 
150+     
151+     #  Should block *FOO*BAR* pattern
152+     refute_line --regexp ' ^XFOOYBARZDOTCOM=' 
153+     
154+     #  Should block *TEST* and *SUFFIX patterns
155+     refute_line --regexp ' ^PREFIX_TEST_VAR=' 
156+     refute_line --regexp ' ^VAR_SUFFIX=' 
157+     
158+     #  Should allow variables that don't match any pattern
159+     assert_line FOO=foo
160+     assert_line FOOBAZ=foobaz
161+     assert_line BAZBAR=bazbar
162+     assert_line BAR=bar
163+     assert_line NORMAL_VAR=normal_var
164+     assert_line UNRELATED=unrelated
165+ }
166+ 
167+ @test ' comprehensive allow/block interaction with wildcards and default blocklist'   {
168+     #  Test allowlist with wildcards, and oter test rules
169+     export  LIMA_SHELLENV_ALLOW=" SSH_FOO,CUSTOM*,FOO*,*PREFIX,MIDDLE*PATTERN,SUFFIX*" 
170+     export  LIMA_SHELLENV_BLOCK=" +*TOKEN" 
171+     export  SSH_FOO=ssh_foo
172+     export  SSH_BAR=ssh_bar
173+     export  CUSTOM_VAR=custom_var
174+     export  MY_TOKEN=my_token
175+     export  SECRET_TOKEN=secret_token
176+     export  FOO=foo
177+     export  FOOBAR=foobar
178+     export  BAR=bar
179+     export  BARBAZ=barbaz
180+     export  TEST_PREFIX=test_prefix
181+     export  MIDDLE_TEST_PATTERN=middle_test_pattern
182+     export  SUFFIX_TEST=suffix_test
183+     export  OTHER_VAR=other_var
184+     export  NORMAL_VAR=normal_var
185+     run -0 limactl shell --preserve-env " $NAME "   printenv
186+     
187+     #  Should allow items in allowlist even if they match default blocklist
188+     assert_line SSH_FOO=ssh_foo
189+     assert_line CUSTOM_VAR=custom_var
190+     assert_line FOO=foo
191+     assert_line FOOBAR=foobar
192+     assert_line TEST_PREFIX=test_prefix
193+     assert_line MIDDLE_TEST_PATTERN=middle_test_pattern
194+     assert_line SUFFIX_TEST=suffix_test
195+     
196+     #  Should block SSH_BAR (default blocklist, not in allowlist)
197+     refute_line --regexp ' ^SSH_BAR=' 
198+     
199+     #  Should block *TOKEN (additive pattern)
200+     refute_line --regexp ' ^MY_TOKEN=' 
201+     refute_line --regexp ' ^SECRET_TOKEN=' 
202+     
203+     #  Should allow other variables not in blocklist
204+     assert_line BAR=bar
205+     assert_line BARBAZ=barbaz
206+     assert_line OTHER_VAR=other_var
207+     assert_line NORMAL_VAR=normal_var
208+ }
209+ 
210+ @test ' invalid characters in patterns cause fatal errors'   {
211+     export  LIMA_SHELLENV_BLOCK=" FOO-BAR" 
212+     run !  limactl shell --preserve-env " $NAME "   printenv
213+     assert_output --partial " Invalid LIMA_SHELLENV_BLOCK pattern" 
214+     assert_output --partial " contains invalid character" 
148215}
149216
150217@test ' limactl info includes the default block list'   {
0 commit comments