[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Segfaults over a glob with quoted UTF-8 characters
From: |
Frédéric Brière |
Subject: |
Segfaults over a glob with quoted UTF-8 characters |
Date: |
Tue, 3 Nov 2020 16:09:47 -0500 |
$ echo $BASH_VERSION
5.1.0(1)-rc1
$ echo $LC_ALL
C.UTF-8
$ echo é/*
é/*
$ echo 'é'/*
Segmentation fault (core dumped)
The same occurs when escaping with a backslash. Whether or not the glob
actually matches something does not appear to matter.
I could not reproduce this with 5.0.3(1)-release, so I guess this was
introduced with version 5.1.
Here's the backtrace:
#5 0x0000564e8eb3a4fb in wdequote_pathname
(pathname=pathname@entry=0x564e8f46b6d0 "é/") at ../../.././lib/glob/glob.c:487
ps = {__count = 0, __value = {__wch = 0, __wchb = "\000\000\000"}}
len = 4
n = <optimized out>
wpathname = 0x0
i = <optimized out>
j = <optimized out>
orig_wpathname = 0x564e8f5b60b0 L"é/"
#6 0x0000564e8eb3b0eb in dequote_pathname (pathname=0x564e8f46b6d0 "é/") at
../../.././lib/glob/glob.c:504
No locals.
#7 glob_filename (pathname=pathname@entry=0x564e8f46b790 "\\é/*", flags=0) at
../../.././lib/glob/glob.c:1466
temp_results = <optimized out>
result = 0x564e8f5d8a50
new_result = <optimized out>
result_size = 1
directory_name = 0x564e8f46b6d0 "é/"
filename = 0x564e8f46b794 "*"
dname = <optimized out>
fn = <optimized out>
directory_len = 4
free_dirname = 1
dflags = <optimized out>
hasglob = <optimized out>
#8 0x0000564e8eb05c2d in shell_glob_filename (pathname=<optimized out>,
qflags=qflags@entry=8) at .././pathexp.c:470
temp = 0x564e8f46b790 "\\é/*"
results = <optimized out>
gflags = <optimized out>
quoted_pattern = <optimized out>
#9 0x0000564e8eaf33e6 in glob_expand_word_list (tlist=0x564e8f45d380,
eflags=31) at .././subst.c:11383
glob_array = 0x0
temp_string = <optimized out>
glob_index = <optimized out>
glob_list = <optimized out>
output_list = 0x564e8f45d160
disposables = 0x0
next = 0x0
tword = <optimized out>
x = <optimized out>
#10 0x0000564e8eb00685 in expand_word_list_internal (eflags=31, list=<optimized
out>) at .././subst.c:11983
new_list = <optimized out>
temp_list = <optimized out>
tint = <optimized out>
savecmd = <optimized out>
new_list = <optimized out>
temp_list = <optimized out>
tint = <optimized out>
savecmd = <optimized out>
assign_func = <optimized out>
is_special_builtin = <optimized out>
is_builtin_or_func = <optimized out>
#11 expand_words (list=<optimized out>) at .././subst.c:11331
No locals.
#12 0x0000564e8ead25f3 in execute_simple_command (fds_to_close=0x564e8f45d6e0,
async=0, pipe_out=-1, pipe_in=-1, simple_command=<optimized out>) at
.././execute_cmd.c:4377
words = <optimized out>
first_word_quoted = <optimized out>
result = <optimized out>
builtin_is_special = 0
old_last_async_pid = <optimized out>
command_line = 0x0
temp = <optimized out>
dofork = <optimized out>
fork_flags = <optimized out>
old_builtin = 0
lastarg = <optimized out>
cmdflags = 0
builtin = <optimized out>
lastword = <optimized out>
already_forked = 0
func = <optimized out>
old_command_builtin = 0
words = <optimized out>
lastword = <optimized out>
command_line = <optimized out>
lastarg = <optimized out>
temp = <optimized out>
first_word_quoted = <optimized out>
result = <optimized out>
builtin_is_special = <optimized out>
already_forked = <optimized out>
dofork = <optimized out>
fork_flags = <optimized out>
cmdflags = <optimized out>
old_last_async_pid = <optimized out>
builtin = <optimized out>
func = <optimized out>
old_builtin = <optimized out>
old_command_builtin = <optimized out>
p = <optimized out>
disposer = <optimized out>
l = <optimized out>
cmdtype = <optimized out>
job = <optimized out>
jflags = <optimized out>
started_status = <optimized out>
#13 execute_command_internal (command=0x564e8f44af10, asynchronous=<optimized
out>, pipe_in=-1, pipe_out=<optimized out>, fds_to_close=0x564e8f45d6e0) at
.././execute_cmd.c:846
exec_result = 0
user_subshell = <optimized out>
invert = <optimized out>
ignore_return = 0
was_error_trap = 0
fork_flags = <optimized out>
my_undo_list = 0x0
exec_undo_list = 0x0
tcmd = <optimized out>
save_line_number = 3
ofifo = 0
nfifo = 0
osize = 0
saved_fifo = 0
ofifo_list = 0x0
#14 0x0000564e8ead3865 in execute_command (command=0x564e8f44af10) at
.././execute_cmd.c:395
bitmap = 0x564e8f45d6e0
result = <optimized out>
#15 0x0000564e8eab99db in reader_loop () at .././eval.c:170
code = <optimized out>
our_indirection_level = 1
current_command = 0x564e8f44af10
#16 0x0000564e8eab8668 in main (argc=1, argv=0x7ffef0ca95a8,
env=0x7ffef0ca95b8) at .././shell.c:811
i = <optimized out>
code = <optimized out>
old_errexit_flag = 0
saverst = <optimized out>
locally_skip_execution = 0
arg_index = 1
top_level_arg_index = 1
- Segfaults over a glob with quoted UTF-8 characters,
Frédéric Brière <=