summaryrefslogtreecommitdiff
path: root/Build/source
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source')
-rw-r--r--Build/source/texk/web2c/lib/ChangeLog4
-rw-r--r--Build/source/texk/web2c/lib/texmfmp.c36
2 files changed, 35 insertions, 5 deletions
diff --git a/Build/source/texk/web2c/lib/ChangeLog b/Build/source/texk/web2c/lib/ChangeLog
index 4215b00ff60..4a369888ba1 100644
--- a/Build/source/texk/web2c/lib/ChangeLog
+++ b/Build/source/texk/web2c/lib/ChangeLog
@@ -1,3 +1,7 @@
+2015-10-31 Akira Kakuto <kakuto@fuk.kinidai.ac.jp>
+
+ * texmfmp.c: Improve restricted shell escape for w32 a little.
+
2015-08-19 Peter Breitenlohner <peb@mppmu.mpg.de>
* texmfmp.c: Another minor modification (unused static).
diff --git a/Build/source/texk/web2c/lib/texmfmp.c b/Build/source/texk/web2c/lib/texmfmp.c
index 8d9f6422182..4545eb9b49e 100644
--- a/Build/source/texk/web2c/lib/texmfmp.c
+++ b/Build/source/texk/web2c/lib/texmfmp.c
@@ -179,8 +179,7 @@ Isspace (char c)
Internally, all arguments are quoted by ' (Unix) or " (Windows)
before calling the system() function in order to forbid execution
- of any embedded command. In addition, on Windows, special
- characters of cmd.exe are escaped by using (^).
+ of any embedded command.
If the --shell-escape option is given, we set
shellenabledp = 1 and restrictedshell = 0, i.e., any command is allowed.
@@ -381,11 +380,20 @@ shell_cmd_is_allowed (const char *cmd, char **safecmd, char **cmdname)
example:
--format="other text files" becomes
'--format=''other text files' (Unix)
- "--format=""other text files" (Windows) */
+ "--format"="other text files" (Windows) */
- if (pre == 0)
+ if (pre == 0) {
+#ifdef WIN32
+ if (*(s-1) == '=') {
+ *(d-1) = QUOTE;
+ *d++ = '=';
+ } else {
+ *d++ = QUOTE;
+ }
+#else
*d++ = QUOTE;
-
+#endif
+ }
pre = 0;
/* output the quotation mark for the quoted argument */
*d++ = QUOTE;
@@ -395,10 +403,16 @@ shell_cmd_is_allowed (const char *cmd, char **safecmd, char **cmdname)
/* Illegal use of ', or closing quotation mark is missing */
if (*s == '\'' || *s == '\0')
return -1;
+#if 0
+/*
+ The following in WIN32 may not be necessary, because
+ all arguments are quoted.
+*/
#ifdef WIN32
if (char_needs_quote (*s))
*d++ = '^';
#endif
+#endif
*d++ = *s++;
}
@@ -415,10 +429,16 @@ shell_cmd_is_allowed (const char *cmd, char **safecmd, char **cmdname)
} else if (pre == 1 && !Isspace (*s)) {
pre = 0;
*d++ = QUOTE;
+#if 0
+/*
+ The following in WIN32 may not be necessary, because
+ all arguments are quoted.
+*/
#ifdef WIN32
if (char_needs_quote (*s))
*d++ = '^';
#endif
+#endif
*d++ = *s++;
/* Ending of a usual argument */
@@ -429,10 +449,16 @@ shell_cmd_is_allowed (const char *cmd, char **safecmd, char **cmdname)
*d++ = *s++;
} else {
/* Copy a character from cmd to *safecmd. */
+#if 0
+/*
+ The following in WIN32 may not be necessary, because
+ all arguments are quoted.
+*/
#ifdef WIN32
if (char_needs_quote (*s))
*d++ = '^';
#endif
+#endif
*d++ = *s++;
}
}