summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSylvestre Ledru <sylvestre@debian.org>2024-03-11 19:51:18 +0100
committerGitHub <noreply@github.com>2024-03-11 19:51:18 +0100
commit93b1abff392fb57c8cd941e57b157bd3b132f573 (patch)
treedbb535da1f219d87228667aa6f3cdc77025c9299
parent0da5a7885b480575f4556f921748081bf50eb32e (diff)
parentbe2474228267fc6622e35fa51e1f15901280c006 (diff)
Merge pull request #6036 from cj-zoltan-kiss/zoltankiss/globfix
parser: if closing square bracket not found, stop looking for it again
-rw-r--r--src/uucore/src/lib/parser/parse_glob.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/uucore/src/lib/parser/parse_glob.rs b/src/uucore/src/lib/parser/parse_glob.rs
index 9215dd7bf..a4e12f467 100644
--- a/src/uucore/src/lib/parser/parse_glob.rs
+++ b/src/uucore/src/lib/parser/parse_glob.rs
@@ -18,7 +18,11 @@ fn fix_negation(glob: &str) -> String {
while i + 3 < chars.len() {
if chars[i] == '[' && chars[i + 1] == '^' {
match chars[i + 3..].iter().position(|x| *x == ']') {
- None => (),
+ None => {
+ // if closing square bracket not found, stop looking for it
+ // again
+ break;
+ }
Some(j) => {
chars[i + 1] = '!';
i += j + 4;
@@ -90,6 +94,11 @@ mod tests {
assert_eq!(fix_negation("[[]] [^a]"), "[[]] [!a]");
assert_eq!(fix_negation("[[] [^a]"), "[[] [!a]");
assert_eq!(fix_negation("[]] [^a]"), "[]] [!a]");
+
+ // test that we don't look for closing square brackets unnecessarily
+ // Verifies issue #5584
+ let chars = std::iter::repeat("^[").take(174571).collect::<String>();
+ assert_eq!(fix_negation(chars.as_str()), chars);
}
#[test]