[git commit] hush: document bugs in [[ =~ ]] comparison

Denys Vlasenko vda.linux at googlemail.com
Sun Nov 1 17:47:24 UTC 2020


commit: https://git.busybox.net/busybox/commit/?id=64981b4c8e88812c322bee3832f1d421ff670ed5
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/hush_test/hush-bugs/strops5_bug.right |  2 ++
 shell/hush_test/hush-bugs/strops5_bug.tests | 10 ++++++++++
 shell/hush_test/hush-test2/strops5.right    |  3 +++
 shell/hush_test/hush-test2/strops5.tests    | 13 +++++++++++++
 4 files changed, 28 insertions(+)

diff --git a/shell/hush_test/hush-bugs/strops5_bug.right b/shell/hush_test/hush-bugs/strops5_bug.right
new file mode 100644
index 000000000..aba7bb429
--- /dev/null
+++ b/shell/hush_test/hush-bugs/strops5_bug.right
@@ -0,0 +1,2 @@
+4:no:1
+5:YES:0
diff --git a/shell/hush_test/hush-bugs/strops5_bug.tests b/shell/hush_test/hush-bugs/strops5_bug.tests
new file mode 100755
index 000000000..3e24df768
--- /dev/null
+++ b/shell/hush_test/hush-bugs/strops5_bug.tests
@@ -0,0 +1,10 @@
+v='*.z'
+
+# Buggy:
+# the problem is that expansion rules of LHS and RHS of ~=
+# should not be the same: in RHS, "$v" and "*" should escape metas
+# (currently "$v" does not),
+# but in LHS, they should _not_ do that
+# (currently "*" does). Thus these cases fail:
+[[ a.z == "$v" ]]; echo 4:no:$?	# BUG: "$v" expands to *.z
+[[ "*".z == ?.z ]]; echo 5:YES:$?	# BUG: "*" expands to \*
diff --git a/shell/hush_test/hush-test2/strops5.right b/shell/hush_test/hush-test2/strops5.right
new file mode 100644
index 000000000..9ed4d6569
--- /dev/null
+++ b/shell/hush_test/hush-test2/strops5.right
@@ -0,0 +1,3 @@
+1:YES:0
+2:no:1
+3:YES:0
diff --git a/shell/hush_test/hush-test2/strops5.tests b/shell/hush_test/hush-test2/strops5.tests
new file mode 100755
index 000000000..ee01e5c30
--- /dev/null
+++ b/shell/hush_test/hush-test2/strops5.tests
@@ -0,0 +1,13 @@
+v='*.z'
+[[ a.z = *.z ]]; echo 1:YES:$?
+[[ a.z = "*".z ]]; echo 2:no:$?
+[[ a.z == $v ]]; echo 3:YES:$?
+
+# Buggy:
+# the problem is that expansion rules of LHS and RHS of ~=
+# should not be the same: in RHS, "$v" and "*" should escape metas
+# (currently "$v" does not),
+# but in LHS, they should _not_ do that
+# (currently "*" does). Thus these cases fail:
+#[[ a.z == "$v" ]]; echo 4:no:$?	# BUG: "$v" expands to *.z
+#[[ "*".z == ?.z ]]; echo 5:YES:$?	# BUG: "*" expands to \*


More information about the busybox-cvs mailing list