Project

General

Profile

Bug #15204

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

Added by LeiYuhou (Yuhou Lei) 2 months ago. Updated 2 months ago.

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

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;
ruby-changes.patch (350 Bytes) ruby-changes.patch LeiYuhou (Yuhou Lei), 10/05/2018 08:20 AM

History

#1 [ruby-core:89283] Updated by LeiYuhou (Yuhou Lei) 2 months ago

sorry, maybe some text was modified by the bug tracker Editor :-)
In Linux's bash

$ ./tt "*.txt"
it's output is : ["*.txt"]

my patch's content:

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;

Also available in: Atom PDF