diff --git a/scripts/checkbashisms.pl b/scripts/checkbashisms.pl
index 471deda..5d8fce4 100755
--- a/scripts/checkbashisms.pl
+++ b/scripts/checkbashisms.pl
@@ -387,9 +387,14 @@ foreach my $filename (@ARGV) {
             # The first expression weeds out '. "foo bar"'
             if (    not $found
                 and not
-m/$LEADIN\.\s+(\"[^\"]+\"|\'[^\']+\'|\$\([^)]+\)+(?:\/[^\s;]+)?)\s*(\&|\||\d?>|<|;|\Z)/o
-                and m/$LEADIN(\.\s+[^\s;\`:]+\s+([^\s;]+))/o) {
-                if ($2 =~ /^(\&|\||\d?>|<)/) {
+m/$LEADIN\.\s+(\"[^\"]+\"|\'[^\']+\'|\"\$\((?:\\.|[^()\"]|\"[^\"]*\"|\([^()]*\))+\)\"|\$\([^)]+\)+(?:\/[^\s;]+)?)\s*(\&|\||\d?>|<|;|\Z)/o
+                and m/$LEADIN(\.\s+([^\s;\`:]+)\s+([^\s;]+))/o) {
+                if ($2 =~ /^(?:\||&&?)$/) {
+                    # The "script" is a shell operator, so this is
+                    # not a sourced file at all (e.g. a case pattern
+                    # list such as:  "" | . | .. | */)
+                    ;
+                } elsif ($3 =~ /^(\&|\||\d?>|<)/) {
                     # everything is ok
                     ;
                 } else {
diff --git a/test/bashisms/870309.sh b/test/bashisms/870309.sh
new file mode 100644
index 0000000..17ed834
--- /dev/null
+++ b/test/bashisms/870309.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+. "$(realpath "${config_file}")"
+. "$(printf "lorem %s\n" "foo bar baz")"
+. ./config.sh "$@"
+case $name in
+  "" | . | .. | */) echo hidden ;;
+esac
diff --git a/test/bashisms/870309.sh.out b/test/bashisms/870309.sh.out
new file mode 100644
index 0000000..22406ce
--- /dev/null
+++ b/test/bashisms/870309.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/870309.sh line 5 (sourced script with arguments):
+. ./config.sh "$@"
diff --git a/test/test_checkbashisms b/test/test_checkbashisms
index 0f6b155..97d1b3b 100755
--- a/test/test_checkbashisms
+++ b/test/test_checkbashisms
@@ -50,6 +50,10 @@ test_808271() {
     found "bashisms/808271.sh" "$(cat bashisms/808271.sh.out)"
 }
 
+test_870309() {
+    found "bashisms/870309.sh" "$(cat bashisms/870309.sh.out)"
+}
+
 test_arith() {
     found "bashisms/arith.sh" "$(cat bashisms/arith.sh.out)"
 }
