]> git-server-git.apps.pok.os.sepia.ceph.com Git - xfsprogs-dev.git/commitdiff
xfs_scrub: drop the warning about mixed bidirectional codepoints in names
authorDarrick J. Wong <djwong@kernel.org>
Mon, 4 May 2026 17:08:52 +0000 (10:08 -0700)
committerAndrey Albershteyn <aalbersh@kernel.org>
Wed, 6 May 2026 09:24:04 +0000 (11:24 +0200)
Gedalya complained about receiving warnings about mixed bidirectional
codepoints in a filename:

"First, well-known file name extensions are not internationalized. While
the file name can be in non-latin letters, the extension will be in
latin. Hence you would expect to see file names such as עברית.pdf ."

Gedalya goes on to point out that file names can be created from (say)
the title of an article, which might itself mix RTL and LTR characters.
Both uses are totally fair, but regrettably unfamiliar to 2018-era me.

Unicode TR 36 even weasel-words its own recommendation: "As much as
possible, avoid mixing right-to-left and left-to-right characters in a
single name."  Maybe I should have paid more attention to weasel
wording in specifications. :P

Let's fix this by removing the warning altogether.

Reported-by: gedalya@gedalya.net
Link: https://lore.kernel.org/linux-xfs/8961ee4a-3830-498b-a432-5545695db599@gedalya.net/
Link: https://www.unicode.org/reports/tr36/tr36-15.html#Bidirectional_Text_Spoofing
Cc: <linux-xfs@vger.kernel.org> # v4.16.0
Fixes: baa9ed8dca213f ("xfs_scrub: check name for suspicious characters")
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Andrey Albershteyn <aalbersh@kernel.org>
scrub/unicrash.c

index 75493c5ee795da3c57f356eda17d71121dd94fea..87c0a8f0542fbb0fb4eb2d11e484bc55b5030404 100644 (file)
@@ -112,23 +112,20 @@ struct unicrash {
 /* Name contains directional overrides. */
 #define UNICRASH_BIDI_OVERRIDE ((__force badname_t)(1U << 1))
 
-/* Name mixes left-to-right and right-to-left characters. */
-#define UNICRASH_BIDI_MIXED    ((__force badname_t)(1U << 2))
-
 /* Control characters in name. */
-#define UNICRASH_CONTROL_CHAR  ((__force badname_t)(1U << 3))
+#define UNICRASH_CONTROL_CHAR  ((__force badname_t)(1U << 2))
 
 /* Invisible characters.  Only a problem if we have collisions. */
-#define UNICRASH_INVISIBLE     ((__force badname_t)(1U << 4))
+#define UNICRASH_INVISIBLE     ((__force badname_t)(1U << 3))
 
 /* Multiple names resolve to the same skeleton string. */
-#define UNICRASH_CONFUSABLE    ((__force badname_t)(1U << 5))
+#define UNICRASH_CONFUSABLE    ((__force badname_t)(1U << 4))
 
 /* Possible phony file extension. */
-#define UNICRASH_PHONY_EXTENSION ((__force badname_t)(1U << 6))
+#define UNICRASH_PHONY_EXTENSION ((__force badname_t)(1U << 5))
 
 /* More than one variation selector in a row. */
-#define UNICRASH_VARIATION_RUN ((__force badname_t)(1U << 7))
+#define UNICRASH_VARIATION_RUN ((__force badname_t)(1U << 6))
 
 /* FULL STOP (aka period), 0x2E */
 #define UCHAR_PERIOD           ((UChar32)'.')
@@ -549,9 +546,6 @@ name_entry_examine(
                was_variation = is_variation;
        }
 
-       /* mixing left-to-right and right-to-left chars */
-       if (mask == 0x3)
-               ret |= UNICRASH_BIDI_MIXED;
        return ret;
 }
 
@@ -869,19 +863,6 @@ _("Unicode name \"%s\" in %s contains a weird sequence of variation selectors.")
        if (!verbose && (uc->is_only_root_writeable || entry->namelen < 4))
                goto out;
 
-       /*
-        * It's not considered good practice (says Unicode) to mix LTR
-        * characters with RTL characters.  The mere presence of different
-        * bidirectional characters isn't enough to trip up software, so don't
-        * warn about this too loudly.
-        */
-       if (badflags & UNICRASH_BIDI_MIXED) {
-               str_info(uc->ctx, descr_render(dsc),
-_("Unicode name \"%s\" in %s mixes bidirectional characters."),
-                               bad1, what);
-               goto out;
-       }
-
        /*
         * We'll note if two names could be confusable with each other, but
         * whether or not the user will actually confuse them is dependent