You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Glob a/ matches the text a: U+E000 already in the text is read as a masked path separator #194
Before calling DotNet.Glob, glob matching replaces / and \ with the private-use character U+E000, in both the pattern and the text (TextFilter/TextFilter.cs:441-450, MaskedPathSeparator / MaskPathSeparators / IsGlobMatch). The masking never escapes a U+E000 that the text already contains. That character then looks exactly like a masked separator:
By the same mechanism, */* and **/ treat U+E000 as a separator, and an exclusion like -*/* hides items whose only "slash" is U+E000.
I checked the first case with a scratch MSTest against main at 5f420d9.
Why it matters
U+E000 is the first private-use code point, and icon fonts really use it (Nerd Fonts' Pomicons, for example, start at E000). ImGui-style UIs, which this library's filters serve, often embed icon glyphs in item labels. A label with such a glyph then matches or fails path-shaped globs depending on whether it has an icon.
Suggested fix
Make the mask unambiguous. Before masking, map any U+E000 already present in the pattern or text to a second private-use character that nothing else uses, so it only ever matches itself. Another way is to escape it in the pattern and substitute it in the text.
Open #175 ("Mask / and \ to different characters") changes the same function, so the two fixes could land together. Note that #175 is about / vs \, not about this aliasing.
Acceptance criteria
IsMatch("a", "a/") is false, and IsMatch("a", "a") is still true
Priority: Low. Only text that already contains U+E000 is affected, and only path-shaped glob patterns (a/, */*, **/, -*/*) misbehave. That does happen with icon-font glyphs in ImGui labels, but plain-text inputs never hit it.
Area / suggested assignment: Glob path-separator masking in TextFilter/TextFilter.cs (MaskedPathSeparator / MaskPathSeparators / IsGlobMatch).
Next step: Once Mask / and \ to different characters in glob matching [patch] #175 is decided, remap any private-use mask character already in the pattern or text to a code point nothing else uses, so it only matches itself. Then add tests for IsMatch("a", "a/") → false and for */* against text that contains U+E000.
Activity
matt-edmondson commentedon Nov 6, 2026
Triage
a/,*/*,**/,-*/*) misbehave. That does happen with icon-font glyphs in ImGui labels, but plain-text inputs never hit it.TextFilter/TextFilter.cs(MaskedPathSeparator/MaskPathSeparators/IsGlobMatch).1/2also matches1\2, and excluding-*/*also hidesC:\temp:/and\are masked to the same character #132, "Mask / and \ to different characters") rewrites the same masking code, so this one either builds on Mask / and \ to different characters in glob matching [patch] #175 or lands with it. If both are done separately they will conflict. No open PR covers this aliasing.IsMatch("a", "a/")→ false and for*/*against text that contains U+E000.Generated by Claude Code