]> granicus.if.org Git - php/commitdiff
MFB: Refine fix for multibyte char hanling inside command names and args
authorIlia Alshanetsky <iliaa@php.net>
Thu, 20 Mar 2008 23:26:01 +0000 (23:26 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Thu, 20 Mar 2008 23:26:01 +0000 (23:26 +0000)
ext/standard/exec.c

index 95116ff32073664421c1fe9b8b474061f20344f1..c545cfc3c15e572c8f6afc512652444df09c83e4 100644 (file)
@@ -259,8 +259,13 @@ PHPAPI char *php_escape_shell_cmd(char *str)
        cmd = safe_emalloc(2, l, 1);
 
        for (x = 0, y = 0; x < l; x++) {
+               int mb_len = php_mblen(str + x, (l - x));
+
                /* skip non-valid multibyte characters */
-               if (php_mblen(str + x, (l - x)) < 0) {
+               if (mb_len < 0) {
+                       continue;
+               } else if (mb_len > 1) {
+                       x += mb_len - 1;
                        continue;
                }
 
@@ -341,6 +346,16 @@ PHPAPI char *php_escape_shell_arg(char *str)
 #endif
 
        for (x = 0; x < l; x++) {
+               int mb_len = php_mblen(str + x, (l - x));
+
+               /* skip non-valid multibyte characters */
+               if (mb_len < 0) {
+                       continue;
+               } else if (mb_len > 1) {
+                       x += mb_len - 1;
+                       continue;
+               }
+
                switch (str[x]) {
 #ifdef PHP_WIN32
                case '"':