uuencode: allow space instead of "`" as padding char. Closes 10046

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-07-14 17:24:59 +02:00
parent 90678f0cd7
commit 7b6e8f3f1a

View File

@ -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); line = xmalloc_fgets_str_len(src_stream, "\n", &line_len);
if (!line) if (!line)
break; 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; 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'; line[str_len] = '\0';
}
if (strcmp(line, "end") == 0) { if (strcmp(line, "end") == 0) {
return; /* the only non-error exit */ 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; encoded_len = line[0] * 4 / 3;
/* Check that line is not too short. (we tolerate /* 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. */ * Empty line case is also caught here. */
if (str_len <= encoded_len) { if (str_len <= encoded_len) {
break; /* go to bb_error_msg_and_die("short file"); */ break; /* go to bb_error_msg_and_die("short file"); */