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) {
|
if (ENABLE_FEATURE_SEAMLESS_LZMA) {
|
||||||
/* .lzma has no header/signature, can only detect it by extension */
|
/* .lzma has no header/signature, can only detect it by extension */
|
||||||
char *sfx = strrchr(fname, '.');
|
if (is_suffixed_with(fname, ".lzma")) {
|
||||||
if (sfx && strcmp(sfx+1, "lzma") == 0) {
|
|
||||||
xstate = xzalloc(sizeof(*xstate));
|
xstate = xzalloc(sizeof(*xstate));
|
||||||
xstate->src_fd = fd;
|
xstate->src_fd = fd;
|
||||||
xstate->xformer = unpack_lzma_stream;
|
xstate->xformer = unpack_lzma_stream;
|
||||||
|
@ -1162,8 +1162,16 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
tar_handle->seek = seek_by_read;
|
tar_handle->seek = seek_by_read;
|
||||||
} else
|
} else
|
||||||
if (ENABLE_FEATURE_TAR_AUTODETECT
|
if (ENABLE_FEATURE_TAR_AUTODETECT
|
||||||
|
&& ENABLE_FEATURE_SEAMLESS_LZMA
|
||||||
&& flags == O_RDONLY
|
&& flags == O_RDONLY
|
||||||
&& !(opt & OPT_ANY_COMPRESS)
|
&& !(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);
|
tar_handle->src_fd = open_zipped(tar_filename, /*fail_if_not_compressed:*/ 0);
|
||||||
if (tar_handle->src_fd < 0)
|
if (tar_handle->src_fd < 0)
|
||||||
|
@ -245,7 +245,7 @@ static int FAST_FUNC config_file_action(const char *filename,
|
|||||||
parser_t *p;
|
parser_t *p;
|
||||||
struct module_entry *m;
|
struct module_entry *m;
|
||||||
int rc = TRUE;
|
int rc = TRUE;
|
||||||
const char *base, *ext;
|
const char *base;
|
||||||
|
|
||||||
/* Skip files that begin with a "." */
|
/* Skip files that begin with a "." */
|
||||||
base = bb_basename(filename);
|
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.
|
* "include FILE_NOT_ENDING_IN_CONF" must work too.
|
||||||
*/
|
*/
|
||||||
if (depth != 0) {
|
if (depth != 0) {
|
||||||
ext = strrchr(base, '.');
|
if (!is_suffixed_with(base, ".conf"))
|
||||||
if (ext == NULL || strcmp(ext + 1, "conf"))
|
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user