Fix reading from stdin (me), Fix tar segfault when no arguments specified (Geoffrey Lee)
diff --git a/archival/tar.c b/archival/tar.c
index 95ef33b..01ec90c 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -611,6 +611,10 @@
unsigned char tar_create = FALSE;
#endif
+ if (argc < 2) {
+ show_usage();
+ }
+
/* Prepend '-' to the first argument if required */
if (argv[1][0] != '-') {
char *tmp = xmalloc(strlen(argv[1]) + 2);
@@ -619,10 +623,6 @@
argv[1] = tmp;
}
- if (argc < 2) {
- show_usage();
- }
-
/* Initialise default values */
tar_handle = init_handle();
tar_handle->flags = ARCHIVE_CREATE_LEADING_DIRS;
@@ -736,13 +736,13 @@
{
if ((tar_filename[0] == '-') && (tar_filename[1] == '\0')) {
tar_handle->src_fd = fileno(stdin);
+ tar_handle->seek = seek_by_char;
} else {
tar_handle->seek = seek_by_jump;
tar_handle->src_fd = xopen(tar_filename, O_RDONLY);
}
#ifdef CONFIG_FEATURE_TAR_GZIP
if (get_header_ptr == get_header_tar_gz) {
- tar_handle->seek = seek_by_char;
get_header_tar_gz(tar_handle);
} else
#endif /* CONFIG_FEATURE_TAR_GZIP */