From f664078e0fcd5988ef0acc124b1f52d2ce7be03c Mon Sep 17 00:00:00 2001 From: Segev Finer Date: Sat, 18 Aug 2018 20:21:08 +0300 Subject: wordexp: Fix the usage of the internal _itoa function The original from glibc received the end of the buffer and worked backwards. Ours needs the beginning of the buffer. Signed-off-by: Segev Finer --- libc/misc/wordexp/wordexp.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libc/misc/wordexp/wordexp.c b/libc/misc/wordexp/wordexp.c index fb635fe91..285e81e87 100644 --- a/libc/misc/wordexp/wordexp.c +++ b/libc/misc/wordexp/wordexp.c @@ -491,10 +491,10 @@ parse_squote(char **word, size_t * word_length, size_t * max_length, #ifdef __WORDEXP_FULL static int eval_expr(char *expr, long int *result); -static char *_itoa(unsigned long long int value, char *buflim) +static char *_itoa(unsigned long long int value, char *buf) { - sprintf(buflim, "%llu", value); - return buflim; + sprintf(buf, "%llu", value); + return buf; } /* Functions to evaluate an arithmetic expression */ @@ -692,7 +692,7 @@ parse_arith(char **word, size_t * word_length, size_t * max_length, result[20] = '\0'; *word = w_addstr(*word, word_length, max_length, - _itoa(convertme, &result[20])); + _itoa(convertme, result)); free(expr); return *word ? 0 : WRDE_NOSPACE; } @@ -717,7 +717,7 @@ parse_arith(char **word, size_t * word_length, size_t * max_length, result[20] = '\0'; *word = w_addstr(*word, word_length, max_length, - _itoa(numresult, &result[20])); + _itoa(numresult, result)); free(expr); return *word ? 0 : WRDE_NOSPACE; } @@ -1313,7 +1313,7 @@ parse_param(char **word, size_t * word_length, size_t * max_length, if (seen_hash) { /* $# expands to the number of positional parameters */ buffer[20] = '\0'; - value = _itoa(__libc_argc - 1, &buffer[20]); + value = _itoa(__libc_argc - 1, buffer); seen_hash = 0; } else { /* Just $ on its own */ @@ -1338,13 +1338,13 @@ parse_param(char **word, size_t * word_length, size_t * max_length, /* Is it `$$'? */ if (*env == '$') { buffer[20] = '\0'; - value = _itoa(getpid(), &buffer[20]); + value = _itoa(getpid(), buffer); } /* Is it `${#*}' or `${#@}'? */ else if ((*env == '*' || *env == '@') && seen_hash) { buffer[20] = '\0'; value = _itoa(__libc_argc > 0 ? __libc_argc - 1 : 0, - &buffer[20]); + buffer); *word = w_addstr(*word, word_length, max_length, value); free(env); free(pattern); @@ -1770,7 +1770,7 @@ parse_param(char **word, size_t * word_length, size_t * max_length, param_length[20] = '\0'; *word = w_addstr(*word, word_length, max_length, _itoa(value ? strlen(value) : 0, - ¶m_length[20])); + param_length)); if (free_value) { assert(value != NULL); free(value); -- cgit v1.2.3