Donner SVG main
0.8.0 ยท 382bd0190.8.0 main
SVG editor and embeddable C⁠+⁠+⁠20 engine.
Loading...
Searching...
No Matches
donner::svg::components::ParsedPayloadResourceBudget Class Reference

Bounds dynamic payload retained while parsing one untrusted SVG document. More...

#include "donner/svg/components/ParsedPayloadResourceBudget.h"

Classes

struct  Limits
 Local ceiling for all retained parsed payloads. More...
struct  SecurityStats
 Current category bytes and cumulative admission failures. More...

Public Types

enum class  Category {
  Attribute ,
  Stylesheet ,
  ProjectedText
}
 Independently attributed parsed payload categories. More...

Public Member Functions

std::size_t maximumRetainedBytes () const
 Current local retained-byte ceiling for recovery-policy checks.
std::shared_ptr< DocumentResourceFamilyBudget > familyBudget () const
 Owning identity of the shared family envelope used by this local budget.
 ParsedPayloadResourceBudget (Limits limits, std::shared_ptr< DocumentResourceFamilyBudget > family=nullptr)
 Create a payload budget with a local ceiling and optional shared family budget.
 ParsedPayloadResourceBudget (const ParsedPayloadResourceBudget &)=delete
ParsedPayloadResourceBudget & operator= (const ParsedPayloadResourceBudget &)=delete
 ParsedPayloadResourceBudget (ParsedPayloadResourceBudget &&other) noexcept
 Transfer reservations without releasing the shared family's retained bytes.
ParsedPayloadResourceBudget & operator= (ParsedPayloadResourceBudget &&)=delete
bool canReserve (Entity entity, std::size_t bytes, Category category) const
 Return whether replacing one entity/category reservation would fit the local envelope.
bool reserve (Entity entity, std::size_t bytes, Category category)
 Atomically replace one entity/category reservation.
void release (Entity entity)
 Release every parsed-payload reservation owned by one entity.
bool reserve (std::size_t bytes, Category category)
 Add an unowned reservation for callers whose payload has no document entity.
void recordRejection ()
 Record a rejected representation whose size cannot safely be expressed or retained.
const SecurityStats & securityStats () const
 Current category accounting and cumulative rejection state.

Static Public Member Functions

static std::optional< std::size_t > estimateAttributeBytes (std::size_t sourceBytes, std::size_t attributeCount)
 Estimate dynamic representation bytes retained by parsed SVG attributes.
static std::optional< std::size_t > estimateStylesheetPreflightBytes (std::size_t sourceBytes, std::size_t projectedSourceBytes)
 Conservative pre-parse bound for raw CSS plus all parser-retained representations.

Detailed Description

Bounds dynamic payload retained while parsing one untrusted SVG document.


Class Documentation

◆ donner::svg::components::ParsedPayloadResourceBudget::Limits

struct donner::svg::components::ParsedPayloadResourceBudget::Limits

Local ceiling for all retained parsed payloads.

Class Members
size_t maximumRetainedBytes = 64 * 1024 * 1024 Maximum aggregate bytes retained across payload categories.

◆ donner::svg::components::ParsedPayloadResourceBudget::SecurityStats

struct donner::svg::components::ParsedPayloadResourceBudget::SecurityStats

Current category bytes and cumulative admission failures.

Class Members
size_t attributeBytes = 0 Bytes attributed to XML attributes.
size_t projectedTextBytes = 0 Bytes attributed to projected SVG text.
bool rejected = false Whether any request was rejected.
size_t rejectedReservations = 0 Number of failed or unrepresentable requests.
size_t retainedBytes = 0 Aggregate payload bytes currently reserved.
size_t stylesheetBytes = 0 Bytes attributed to stylesheets.

Member Enumeration Documentation

◆ Category

Independently attributed parsed payload categories.

Enumerator
Attribute 

Parsed XML attribute representations.

Stylesheet 

Parsed stylesheet representations.

ProjectedText 

SVG text projected from the XML tree.

Constructor & Destructor Documentation

◆ ParsedPayloadResourceBudget() [1/2]

donner::svg::components::ParsedPayloadResourceBudget::ParsedPayloadResourceBudget ( Limits limits,
std::shared_ptr< DocumentResourceFamilyBudget > family = nullptr )
inlineexplicit

Create a payload budget with a local ceiling and optional shared family budget.

Parameters
limitsLocal retained-byte limit.
familyShared document resource budget, or null for local accounting only.

◆ ParsedPayloadResourceBudget() [2/2]

donner::svg::components::ParsedPayloadResourceBudget::ParsedPayloadResourceBudget ( ParsedPayloadResourceBudget && other)
inlinenoexcept

Transfer reservations without releasing the shared family's retained bytes.

Parameters
otherBudget whose reservations are moved into this object.

The documentation for this class was generated from the following file: