Project

General

Profile

Actions

Bug #15204

closed

globbing should be prevented when wildcard is surrounded by double quotes in the ruby's command line

Added by LeiYuhou (Yuhou Lei) over 5 years ago. Updated over 2 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.5.1p57 (2018-03-29 revision 63029) [x64-mswin64_140]
[ruby-core:89282]
Tags:

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

ruby-changes.patch (350 Bytes) ruby-changes.patch LeiYuhou (Yuhou Lei), 10/05/2018 08:20 AM
Actions

Also available in: Atom PDF

Like0
Like0Like0