Issue #15204 has been reported by LeiYuhou (Yuhou Lei).

----------------------------------------
Bug #15204: globbing should be prevented when wildcard is surrounded by double quotes in the ruby's command line
https://bugs.ruby-lang.org/issues/15204

* Author: LeiYuhou (Yuhou Lei)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.5.1p57 (2018-03-29 revision 63029) [x64-mswin64_140]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
script tt like following:

~~~ ruby
#!/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--------------------------------
ruby-changes.patch (350 Bytes)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>