Skip to main content

BaseUrlContext

Struct BaseUrlContext 

Source
pub struct BaseUrlContext { /* private fields */ }
Expand description

Context for tracking base URLs during parsing

This struct maintains the current base URL context and provides methods for URL resolution within a parsing context.

Implementations§

Source§

impl BaseUrlContext

Source

pub const fn new() -> Self

Creates a new context with no base URL

Source

pub fn with_base(base: impl Into<String>) -> Self

Creates a new context with an initial base URL

Source

pub const fn with_resolve(self, resolve: bool) -> Self

Sets whether relative URL resolution is enabled (builder pattern)

When false, Self::resolve never joins href against base — it always returns href unchanged. Self::resolve_safe is different: it still validates whatever resolve returns (dangerous schemes, SSRF/private-IP checks) even when this is false, so it does not simply return href unchanged — see its docs for why. Mirrors ParseOptions::resolve_relative_uris.

Source

pub fn base(&self) -> Option<&str>

Gets the current base URL

Source

pub fn update_base(&mut self, xml_base: &str)

Updates the base URL with a new xml:base value

The new base is resolved against the current base if it’s relative.

Source

pub fn resolve(&self, href: &str) -> String

Resolves a URL against the current base

Returns href unchanged when relative URL resolution is disabled (see Self::with_resolve).

Source

pub fn resolve_safe(&self, href: &str) -> String

Resolves a URL against the current base with SSRF protection

This method performs URL resolution and validates the result to prevent Server-Side Request Forgery (SSRF) attacks via malicious xml:base attributes.

§Security

If the resolved URL fails SSRF safety checks (localhost, private IPs, dangerous schemes), the original href is returned unchanged instead of the resolved URL.

§Security

These safety checks run unconditionally, even when relative URL resolution is disabled via Self::with_resolve. with_resolve(false) only disables joining href against base; it never skips scheme/SSRF validation, so a feed-supplied href that is itself an absolute dangerous or private-network URL is still blocked (#438).

§Arguments
  • href - The URL to resolve (may be relative or absolute)
§Returns

The resolved URL if safe, otherwise the original href

§Examples
use feedparser_rs::util::base_url::BaseUrlContext;

// Safe URL resolution
let ctx = BaseUrlContext::with_base("http://example.com/");
assert_eq!(ctx.resolve_safe("page.html"), "http://example.com/page.html");

// SSRF blocked - returns original href
let dangerous_ctx = BaseUrlContext::with_base("http://localhost/");
assert_eq!(dangerous_ctx.resolve_safe("admin"), "admin");

// Safety checks still run when relative resolution is disabled
let no_resolve_ctx = BaseUrlContext::new().with_resolve(false);
assert_eq!(
    no_resolve_ctx.resolve_safe("http://169.254.169.254/latest/meta-data/"),
    ""
);
Source

pub fn child(&self) -> Self

Creates a child context inheriting this context’s base

Source

pub fn child_with_base(&self, xml_base: &str) -> Self

Creates a child context with an additional xml:base

Trait Implementations§

Source§

impl Clone for BaseUrlContext

Source§

fn clone(&self) -> BaseUrlContext

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BaseUrlContext

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for BaseUrlContext

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more