mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-12 10:03:51 +00:00
hayro-postscript 0.1.0 is the token scanner hayro-cmap uses for the CMap streams PDFs embed. Its object reader skipped each `<<` or `>>` by calling itself again, so a stream holding a long run of `<` or `>` bytes recursed once per pair and aborted the process with a stack overflow. Vendor the crates.io package unchanged and patch `object::read` to skip those runs in a loop, returning the same next object as before. Wire it in like the other Hayro crates: workspace exclude, [patch.crates-io] entry, SOURCE.json with registry and local hashes, the backend test script, NOTICE, ATTRIBUTION.md and the reader README. Tests cover a million `<` and a million `>` bytes, `<< /A 1 >>` and nested `<<<< /X >>>>` runs.
31 lines
950 B
Rust
31 lines
950 B
Rust
//! Error types for the PostScript scanner.
|
|
|
|
use core::fmt;
|
|
|
|
/// A specialized [`Result`] type for PostScript scanner operations.
|
|
pub type Result<T> = core::result::Result<T, Error>;
|
|
|
|
/// An error encountered while scanning a PostScript token stream.
|
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
|
pub enum Error {
|
|
/// A syntax error in the input.
|
|
SyntaxError,
|
|
/// A numeric value exceeded implementation limits.
|
|
LimitCheck,
|
|
/// An unsupported PostScript type was encountered (like dictionaries or
|
|
/// procedures, which will be added in the future).
|
|
UnsupportedType,
|
|
}
|
|
|
|
impl fmt::Display for Error {
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
match self {
|
|
Self::SyntaxError => f.write_str("syntaxerror"),
|
|
Self::LimitCheck => f.write_str("limitcheck"),
|
|
Self::UnsupportedType => f.write_str("unsupported type"),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl core::error::Error for Error {}
|