@@ -342,6 +342,77 @@ describe("snacks.explorer integration", function()
342
342
vim .fn .isdirectory = original_isdirectory
343
343
package.loaded [" snacks" ] = nil
344
344
end )
345
+
346
+ it (" should protect against root-level files" , function ()
347
+ -- Mock snacks module with root-level and safe files
348
+ local mock_explorer = {
349
+ selected = function (self , opts )
350
+ return {
351
+ { file = " /etc/passwd" }, -- root-level file (dangerous)
352
+ { file = " /home/user/file.lua" }, -- safe file
353
+ { file = " /usr/bin/vim" }, -- root-level file (dangerous)
354
+ { file = " /path/to/directory/" }, -- safe directory
355
+ }
356
+ end ,
357
+ current = function (self , opts )
358
+ return { file = " /etc/hosts" } -- root-level file
359
+ end ,
360
+ }
361
+
362
+ local mock_snacks = {
363
+ picker = {
364
+ get = function (opts )
365
+ if opts .source == " explorer" then
366
+ return { mock_explorer }
367
+ end
368
+ return {}
369
+ end ,
370
+ },
371
+ }
372
+
373
+ package.loaded [" snacks" ] = mock_snacks
374
+
375
+ -- Test selected items - should filter out root-level files
376
+ local files , err = integrations ._get_snacks_explorer_selection ()
377
+ assert .is_nil (err )
378
+ assert .are .same ({
379
+ " /home/user/file.lua" ,
380
+ " /path/to/directory/" ,
381
+ }, files )
382
+
383
+ package.loaded [" snacks" ] = nil
384
+ end )
385
+
386
+ it (" should return error for root-level current file" , function ()
387
+ -- Mock snacks module with root-level current file and no selection
388
+ local mock_explorer = {
389
+ selected = function (self , opts )
390
+ return {} -- No selection
391
+ end ,
392
+ current = function (self , opts )
393
+ return { file = " /etc/passwd" } -- root-level file
394
+ end ,
395
+ }
396
+
397
+ local mock_snacks = {
398
+ picker = {
399
+ get = function (opts )
400
+ if opts .source == " explorer" then
401
+ return { mock_explorer }
402
+ end
403
+ return {}
404
+ end ,
405
+ },
406
+ }
407
+
408
+ package.loaded [" snacks" ] = mock_snacks
409
+
410
+ local files , err = integrations ._get_snacks_explorer_selection ()
411
+ assert .are .same ({}, files )
412
+ assert .equals (" Cannot add root-level file. Please select a file in a subdirectory." , err )
413
+
414
+ package.loaded [" snacks" ] = nil
415
+ end )
345
416
end )
346
417
347
418
describe (" get_selected_files_from_tree" , function ()
0 commit comments