tar: fix too eager autodetection, closes 11531
function old new delta is_suffixed_with - 54 +54 tar_main 1006 1026 +20 open_transformer 92 79 -13 config_file_action 478 458 -20 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/2 up/down: 74/-33) Total: 41 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
2d217799e8
commit
f4fc303e36
@ -278,8 +278,7 @@ static transformer_state_t *open_transformer(const char *fname, int fail_if_not_
|
||||
|
||||
if (ENABLE_FEATURE_SEAMLESS_LZMA) {
|
||||
/* .lzma has no header/signature, can only detect it by extension */
|
||||
char *sfx = strrchr(fname, '.');
|
||||
if (sfx && strcmp(sfx+1, "lzma") == 0) {
|
||||
if (is_suffixed_with(fname, ".lzma")) {
|
||||
xstate = xzalloc(sizeof(*xstate));
|
||||
xstate->src_fd = fd;
|
||||
xstate->xformer = unpack_lzma_stream;
|
||||
|
@ -1162,8 +1162,16 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
|
||||
tar_handle->seek = seek_by_read;
|
||||
} else
|
||||
if (ENABLE_FEATURE_TAR_AUTODETECT
|
||||
&& ENABLE_FEATURE_SEAMLESS_LZMA
|
||||
&& flags == O_RDONLY
|
||||
&& !(opt & OPT_ANY_COMPRESS)
|
||||
&& is_suffixed_with(tar_filename, ".lzma")
|
||||
/* We do this only for .lzma files, they have no signature.
|
||||
* All other compression formats are recognized in
|
||||
* get_header_tar() when first tar block has invalid format.
|
||||
* Doing it here for all filenames would falsely trigger
|
||||
* on e.g. tarball with 1st file named "BZh5".
|
||||
*/
|
||||
) {
|
||||
tar_handle->src_fd = open_zipped(tar_filename, /*fail_if_not_compressed:*/ 0);
|
||||
if (tar_handle->src_fd < 0)
|
||||
|
@ -245,7 +245,7 @@ static int FAST_FUNC config_file_action(const char *filename,
|
||||
parser_t *p;
|
||||
struct module_entry *m;
|
||||
int rc = TRUE;
|
||||
const char *base, *ext;
|
||||
const char *base;
|
||||
|
||||
/* Skip files that begin with a "." */
|
||||
base = bb_basename(filename);
|
||||
@ -266,8 +266,7 @@ static int FAST_FUNC config_file_action(const char *filename,
|
||||
* "include FILE_NOT_ENDING_IN_CONF" must work too.
|
||||
*/
|
||||
if (depth != 0) {
|
||||
ext = strrchr(base, '.');
|
||||
if (ext == NULL || strcmp(ext + 1, "conf"))
|
||||
if (!is_suffixed_with(base, ".conf"))
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user