Commit 01019f2b authored by Simon McVittie's avatar Simon McVittie Committed by Simon McVittie

Ensure hyphen/minus is treated as literal in regexes

Each U+002D HYPHEN-MINUS in [0-9A-Za-z_-/.\] is treated as a member of a
range. The third one, which appears to have been intended to be a
literal, is part of an empty range because the starting point
U+005F LOW LINE is greater than the endpoint U+002F SOLIDUS, resulting
in at least some grep implementations not considering U+002D, U+002F
or U+005F to match the pattern. This resulted in one of the
dbus-launch tests being unintentionally skipped when it used a
regex based on the one in the spec.

regex(7) suggests "To include a literal '-' [in a bracketed character
set], make it the first or last character".
Signed-off-by: Simon McVittie's avatarSimon McVittie <smcv@collabora.com>
Reviewed-by: Philip Withnall's avatarPhilip Withnall <withnall@endlessm.com>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=100686
parent ef628c3b
......@@ -3097,7 +3097,7 @@
<listitem>
<para>
The set of optionally-escaped bytes is:
<literal>[0-9A-Za-z_-/.\]</literal>. To escape, each
<literal>[-0-9A-Za-z_/.\]</literal>. To escape, each
<emphasis>byte</emphasis> (note, not character) which is not in the
set of optionally-escaped bytes must be replaced with an ASCII
percent (<literal>%</literal>) and the value of the byte in hex.
......
......@@ -198,7 +198,7 @@ test_xdg_runtime_dir () {
export XDG_RUNTIME_DIR="$workdir"
fake_uuid="ffffffffffffffffffffffffffffffff"
if echo "$workdir" | grep '[^0-9A-Za-z_-/.]'; then
if echo "$workdir" | grep '[^-0-9A-Za-z_/.]'; then
test_num=$(($test_num + 1))
echo "ok ${test_num} # SKIP - $workdir would need escaping"
return
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment