From 908d8780525dfeab4936c56425e68e58fad8b257 Mon Sep 17 00:00:00 2001 From: lordmarrik <124731356+lordmarrik@users.noreply.github.com> Date: Sat, 10 Oct 2026 10:53:09 -0400 Subject: [PATCH] Sanitize: element-aware URI scheme check so data: can be disallowed without losing data:image replace_urls() only consulted is_allowed_scheme(), a plain scheme blocklist, so consumers could not disallow `data:` without also breaking inert `data:image/...` on . Add is_allowed_uri(tag, attribute, uri): when `data` is disallowed it still permits data:image/... on img[src], image[src] and video[poster], and blocks `data:` everywhere else (, ', + '', + ['javascript', 'data'], + ]; + + yield 'data scheme case insensitive' => [ + 'Click me', + 'Click me', + ['javascript', 'data'], + ]; + + yield 'data image kept on img src' => [ + '', + '', + ['javascript', 'data'], + ]; + + yield 'data non-image blocked on img src' => [ + '', + '', + ['javascript', 'data'], + ]; + + yield 'data image blocked on href' => [ + 'Click me', + 'Click me', + ['javascript', 'data'], + ]; + + yield 'data scheme unaffected when not disallowed' => [ + 'Click me', + 'Click me', + ['javascript'], + ]; } /**