Bug #15204
closedglobbing should be prevented when wildcard is surrounded by double quotes in the ruby's command line
Description
script tt like following:
#!/usr/bin/ruby
p ARGV
if a command line argument contains wildcard such as * or ? is surrounded by double quotes , the script's results are different between Linux and Windows.
when run tt in Linux's bash :
$ ./tt ".txt"
it's output is : [".txt"]
but when run tt in Windows 10(x64)'s Command Prompter cmd.exe :
c:> ruby tt.rb "*.exe"
it's output is ["a.txt" , "b.txt" , "c.txt"]
I know , If enclosed with single quote, the behavior are same in Linux and Windows.
I think it's behavior should be exactly same whenever any OS or Shell . otherwise it will bring many trouble to developers , think of the following sceneļ¼
users maybe pass asterisk(*) in the command line arguments to my script , to prevent bash to expand it , I will request users to enclose this parameter with double quotes, this will work fine in Linux . but when it 's run in windows , it will fail .
Bash will expand wildcard with globbing before passing the arguments to ruby process , the function w32_cmdvector in win32/win32.c does the same thing like Bash, Just add a condition , the bug will be fixed.
Index: win32/win32.c¶
--- win32/win32.c (revision 64922)
+++ win32/win32.c (working copy)
@@ -1733,7 +1733,7 @@
// N.B. Don't glob if inside a single quoted string
//
-
if (quote != L'\'')
-
if (quote != L'\'' && quote != L'"') globbing++; slashes = 0; break;
Files