Browse Source

fix: escape more regex meta chars

add related testcases
rcmerci 7 months ago
parent
commit
193e603547

+ 2 - 2
deps/common/src/logseq/common/util.cljs

@@ -292,13 +292,13 @@
       (:block/name page)))
 
 (defn string-join-path
-  #_:clj-kondo/ignore
   "Replace all `strings/join` used to construct paths with this function to reduce lint output.
   https://github.com/logseq/logseq/pull/8679"
   [parts]
+  #_:clj-kondo/ignore
   (string/join "/" parts))
 
-(def escape-chars "[]{}().+*?|$")
+(def ^:private escape-chars "\\[]{}().+*?|$^")
 
 (defn escape-regex-chars
   "Escapes characters in string `old-value"

+ 31 - 23
deps/common/test/logseq/common/util_test.cljs

@@ -1,39 +1,47 @@
 (ns logseq.common.util-test
-  (:require [clojure.test :refer [deftest are]]
+  (:require [clojure.test :refer [deftest are testing]]
             [logseq.common.util :as common-util]))
 
 (deftest valid-edn-keyword?
   (are [x y]
        (= (common-util/valid-edn-keyword? x) y)
 
-       ":foo-bar"  true
-       ":foo!"     true
-       ":foo,bar"  false
-       "4"         false
-       "foo bar"   false
-       "`property" false))
+    ":foo-bar"  true
+    ":foo!"     true
+    ":foo,bar"  false
+    "4"         false
+    "foo bar"   false
+    "`property" false))
 
 (deftest extract-file-extension?
   (are [x y]
        (= (common-util/path->file-ext x) y)
-       "foo.bar" "bar"
-       "foo"     nil
-       "foo.bar.baz" "baz"
-       "../assets/audio.mp3" "mp3"
+    "foo.bar" "bar"
+    "foo"     nil
+    "foo.bar.baz" "baz"
+    "../assets/audio.mp3" "mp3"
        ;; From https://www.w3.org/TR/media-frags/
-       "../assets/audio.mp3?t=10,20" "mp3"
-       "../assets/audio.mp3?t=10,20#t=10" "mp3"
-       "/root/Documents/audio.mp3" "mp3"
-       "C:\\Users\\foo\\Documents\\audio.mp3" "mp3"
-       "/root/Documents/audio" nil
-       "/root/Documents/audio." nil
-       "special/characters/aäääöüß.7z" "7z"
-       "asldk lakls .lsad" "lsad"
-       "中文asldk lakls .lsad" "lsad"))
+    "../assets/audio.mp3?t=10,20" "mp3"
+    "../assets/audio.mp3?t=10,20#t=10" "mp3"
+    "/root/Documents/audio.mp3" "mp3"
+    "C:\\Users\\foo\\Documents\\audio.mp3" "mp3"
+    "/root/Documents/audio" nil
+    "/root/Documents/audio." nil
+    "special/characters/aäääöüß.7z" "7z"
+    "asldk lakls .lsad" "lsad"
+    "中文asldk lakls .lsad" "lsad"))
 
 (deftest url?
   (are [x y]
        (= (common-util/url? x) y)
-       "http://logseq.com" true
-       "prop:: value" false
-       "a:" false))
+    "http://logseq.com" true
+    "prop:: value" false
+    "a:" false))
+
+(deftest escape-regex-chars
+  (testing "ensure the result is a valid regex string"
+    (are [x]
+        (some? (re-find (re-pattern  (common-util/escape-regex-chars x)) x))
+      "[[page-name]]"
+      "end-with-backslash\\"
+      "\\[]{}().+*?|$^")))