]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Calculate length correctly in win32argvtos
authorJoel Rosdahl <joel@rosdahl.net>
Thu, 25 Apr 2019 19:21:53 +0000 (21:21 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Thu, 25 Apr 2019 19:21:53 +0000 (21:21 +0200)
src/execute.c

index af95a343cee6d4f01653f5417d30c0cb0ec5dc5e..3ee095346c46780013d72588688552d5dc4bddae 100644 (file)
@@ -30,7 +30,6 @@ win32argvtos(char *prefix, char **argv, int *length)
 {
        int i = 0;
        int k = 0;
-       *length = 0;
        char *arg = prefix ? prefix : argv[i++];
        do {
                int bs = 0;
@@ -53,9 +52,9 @@ win32argvtos(char *prefix, char **argv, int *length)
        char *ptr = malloc(k + 1);
        char *str = ptr;
        if (!str) {
+               *length = 0;
                return NULL;
        }
-       *length = k;
 
        i = 0;
        arg = prefix ? prefix : argv[i++];
@@ -85,6 +84,7 @@ win32argvtos(char *prefix, char **argv, int *length)
        } while ((arg = argv[i++]));
        ptr[-1] = '\0';
 
+       *length = ptr - str - 1;
        return str;
 }
 
@@ -174,7 +174,7 @@ win32execute(char *path, char **argv, int doreturn,
                char *tmp_file = format("%s.tmp", path);
                FILE *fp = create_tmp_file(&tmp_file, "w");
                char atfile[MAX_PATH + 3];
-               fwrite(args, 1, length - 1, fp);
+               fwrite(args, 1, length, fp);
                fclose(fp);
                if (ferror(fp)) {
                        cc_log("Error writing @file; this command will probably fail: %s", args);