diff options
author | Denys Vlasenko | 2017-07-14 17:24:59 +0200 |
---|---|---|
committer | Denys Vlasenko | 2017-07-18 19:20:58 +0200 |
commit | 87d8ae94a25b8ca7b43536254af10d2f163e5352 (patch) | |
tree | b17a5cc55f0413a83bc6fb09a848a7774c92a3b5 | |
parent | a3de7190a5936edb4e86d4228e9f271fc42be43e (diff) | |
download | busybox-87d8ae94a25b8ca7b43536254af10d2f163e5352.zip busybox-87d8ae94a25b8ca7b43536254af10d2f163e5352.tar.gz |
uuencode: allow space instead of "`" as padding char. Closes 10046
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | coreutils/uudecode.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/coreutils/uudecode.c b/coreutils/uudecode.c index ddce254..2fe771f 100644 --- a/coreutils/uudecode.c +++ b/coreutils/uudecode.c @@ -47,10 +47,16 @@ static void FAST_FUNC read_stduu(FILE *src_stream, FILE *dst_stream, int flags U line = xmalloc_fgets_str_len(src_stream, "\n", &line_len); if (!line) break; - /* Handle both Unix and MSDOS text, and stray trailing spaces */ + /* Handle both Unix and MSDOS text. + * Note: space should not be trimmed, some encoders use it instead of "`" + * for padding of last incomplete 4-char block. + */ str_len = line_len; - while (--str_len >= 0 && isspace(line[str_len])) + while (--str_len >= 0 + && (line[str_len] == '\n' || line[str_len] == '\r') + ) { line[str_len] = '\0'; + } if (strcmp(line, "end") == 0) { return; /* the only non-error exit */ @@ -65,7 +71,7 @@ static void FAST_FUNC read_stduu(FILE *src_stream, FILE *dst_stream, int flags U encoded_len = line[0] * 4 / 3; /* Check that line is not too short. (we tolerate - * overly _long_ line to accommodate possible extra '`'). + * overly _long_ line to accommodate possible extra "`"). * Empty line case is also caught here. */ if (str_len <= encoded_len) { break; /* go to bb_error_msg_and_die("short file"); */ |