]> 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:25:42 +0000 (23:25 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Thu, 20 Mar 2008 23:25:42 +0000 (23:25 +0000)
ext/standard/exec.c

index e7ffa272f471085e344c9eb6bbe446484654cd3c..a26305895107ae9ae42da75f31e507b66e87ae60 100644 (file)
@@ -273,8 +273,13 @@ 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;
                }
 
@@ -349,6 +354,16 @@ 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 '"':