From 9554b92c86d090f7bb952a7a407f42bccb212b67 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Sun, 24 Dec 2023 14:04:46 +0900 Subject: [PATCH] Allow escaped meta-characters in version script patterns --- common/glob.cc | 8 ++++++++ test/elf/version-script23.sh | 15 +++++++++++++++ 2 files changed, 23 insertions(+) create mode 100755 test/elf/version-script23.sh diff --git a/common/glob.cc b/common/glob.cc index c15ccca9..43bcda2c 100644 --- a/common/glob.cc +++ b/common/glob.cc @@ -79,6 +79,14 @@ std::optional Glob::compile(std::string_view pat) { case '*': vec.push_back({STAR}); break; + case '\\': + if (pat.empty()) + return {}; + if (vec.empty() || vec.back().kind != STRING) + vec.push_back({STRING}); + vec.back().str += pat[0]; + pat = pat.substr(1); + break; default: if (vec.empty() || vec.back().kind != STRING) vec.push_back({STRING}); diff --git a/test/elf/version-script23.sh b/test/elf/version-script23.sh new file mode 100755 index 00000000..c09ec062 --- /dev/null +++ b/test/elf/version-script23.sh @@ -0,0 +1,15 @@ +#!/bin/bash +. $(dirname $0)/common.inc + +cat <<'EOF' > $t/a.ver +VER1 { foo\?; }; +EOF + +cat < $t/log +grep -Fq 'foo?@@VER1' $t/log