What's Changed
Security patch. Hardens RSS description rendering, the transcript proxy, image caching, and public AJAX endpoints. Recommended for all users.
Security Fixes
- HTML Sanitization: Centralized RSS description sanitization (
podloom_sanitize_rss_description_html()) stripsjavascript:,data:, andvbscript:hrefs and addsrel="noopener noreferrer"to external links; replaces three duplicated sanitization blocks - Transcript Proxy: Enforces
http/httpsscheme after URL validation, addswp_http_validate_url()as a second SSRF layer, caps response size vialimit_response_sizebefore reading body into memory, checks Content-Length header - Image Cache: URL validated with
esc_url_raw+wp_http_validate_url+ scheme check before any fetch;limit_response_sizeadded to request args; Content-Length header checked before reading body - Image Cache AJAX: Endpoint now requires a valid
podloom_image_cache_noncenonce (HTTP 403 on failure); queue items validated for required fields before processing - Pagination: Public episode AJAX endpoints clamp
limittomax(1, min(x, 50))to prevent division-by-zero edge cases - Episode Ingest: Episode
descriptionandcontentsanitized at cache time inrefresh_feed_with_data()and re-sanitized on read inget_episodes()for defense-in-depth on legacy cached data - Block Editor: Client-side
sanitizeHtmlForPreview()sanitizer added to episode block editor preview, replacing rawdangerouslySetInnerHTMLbinding