[MPlayer-dev-eng] [PATCH] Use unrar for open vobsubs if available
Ulion
ulion2002 at gmail.com
Wed Dec 12 14:29:36 CET 2007
2007/12/11, Ulion <ulion2002 at gmail.com>:
> 2007/12/7, Reimar Doeffinger <Reimar.Doeffinger at stud.uni-karlsruhe.de>:
> > Hello,
> > On Thu, Dec 06, 2007 at 11:20:14PM +0800, Ulion wrote:
> > [...]
> > > I really don't like writing windows api code, anyone can save me? I'd
> > > like to use popen on mingw if no one want to write that part of
> > > CreateProcess code for it. On the other hand, once the executable is a
> > > pre-tested existed file and command line parameters are correctly
> > > escaped, there's no obvious security problem to use popen on win32.
> >
> > The escaping rules for Windows are rather weird, and at least I don't easily
> > feel confident to say that I know all the small hacks they introduced.
>
> OK, I found the microsoft specific document for parsing and construct
> command line:
> http://msdn2.microsoft.com/en-us/library/ms880421.aspx
>
> Microsoft Specific ―>
>
> Microsoft C startup code uses the following rules when interpreting
> arguments given on the operating system command line:
>
> * Arguments are delimited by white space, which is either a space or a tab.
> * A string surrounded by double quotation marks is interpreted as
> a single argument, regardless of white space contained within. A
> quoted string can be embedded in an argument. Note that the caret (^)
> is not recognized as an escape character or delimiter.
> * A double quotation mark preceded by a backslash, \", is
> interpreted as a literal double quotation mark (").
> * Backslashes are interpreted literally, unless they immediately
> precede a double quotation mark.
> * If an even number of backslashes is followed by a double
> quotation mark, then one backslash (\) is placed in the argv array for
> every pair of backslashes (\\), and the double quotation mark (") is
> interpreted as a string delimiter.
> * If an odd number of backslashes is followed by a double
> quotation mark, then one backslash (\) is placed in the argv array for
> every pair of backslashes (\\) and the double quotation mark is
> interpreted as an escape sequence by the remaining backslash, causing
> a literal double quotation mark (") to be placed in argv.
>
> After read the document, maybe you think use quotes is better, but
> unfortunately the quotes did not keep '%' as a literal character (try
> '%OS% in your command line and test.) and % can not be escaped within
> quotes. That can be fixed by replace % with "%" or "^%" (include the
> quotes, but you should known % is not within quotes, it's between two
> pair quotes,)
> Then I choose to use current escape method, mainly use ^ to escape all
> possible special characters, and use quotes for spaces and tabs, and
> take good care of literal quotation and backslashes. That will works
> and robost.
>
> Here's my updated patch.
If there's no objection, I will apply this patch in 2 days.
--
Ulion
More information about the MPlayer-dev-eng
mailing list