diff options
Diffstat (limited to 'bin')
| -rw-r--r-- | bin/rdsquashfs/describe.c | 14 | 
1 files changed, 11 insertions, 3 deletions
| diff --git a/bin/rdsquashfs/describe.c b/bin/rdsquashfs/describe.c index d30f844..924bedc 100644 --- a/bin/rdsquashfs/describe.c +++ b/bin/rdsquashfs/describe.c @@ -9,15 +9,17 @@  static int print_name(const sqfs_tree_node_t *n)  {  	char *start, *ptr, *name = sqfs_tree_node_get_path(n); -	int ret;  	if (name == NULL) {  		perror("Recovering file path of tree node");  		return -1;  	} -	ret = canonicalize_name(name); -	assert(ret == 0); +	if (canonicalize_name(name) != 0) { +		fprintf(stderr, "Error sanitizing file path '%s'\n", name); +		free(name); +		return -1; +	}  	if (strchr(name, ' ') == NULL && strchr(name, '"') == NULL) {  		fputs(name, stdout); @@ -70,6 +72,12 @@ int describe_tree(const sqfs_tree_node_t *root, const char *unpack_root)  {  	const sqfs_tree_node_t *n; +	if (!is_filename_sane((const char *)root->name, false)) { +		fprintf(stderr, "Encountered illegal file name '%s'\n", +			root->name); +		return -1; +	} +  	switch (root->inode->base.mode & S_IFMT) {  	case S_IFSOCK:  		return print_simple("sock", root, NULL); | 
