Skip to content

Константы и ошибки

Константы конфигурации по умолчанию

КонстантаТипЗначениеОписание
DefaultMaxInputSizeint52428800Максимальный размер ввода (50 МБ)
DefaultMaxCacheEntriesint2000Максимальное количество записей в кэше
DefaultWorkerPoolSizeint4Размер пула воркеров
DefaultCacheTTLtime.DurationВремя жизни записей в кэше
DefaultCacheCleanuptime.DurationИнтервал очистки кэша
DefaultMaxDepthint500Максимальная глубина DOM
DefaultProcessingTimeouttime.Duration30сТайм-аут обработки

Константы аудита

Типы событий аудита

КонстантаЗначениеОписание
AuditEventBlockedTag"blocked_tag"Заблокированный тег
AuditEventBlockedAttr"blocked_attr"Заблокированный атрибут
AuditEventBlockedURL"blocked_url"Заблокированный URL
AuditEventInputViolation"input_violation"Нарушение ввода
AuditEventDepthViolation"depth_violation"Нарушение глубины
AuditEventTimeout"timeout"Тайм-аут обработки
AuditEventEncodingIssue"encoding_issue"Проблема кодировки
AuditEventPathTraversal"path_traversal"Попытка обхода пути

Уровни аудита

КонстантаТипЗначениеОписание
AuditLevelInfoAuditLevel"info"Информационный уровень
AuditLevelWarningAuditLevel"warning"Уровень предупреждения
AuditLevelCriticalAuditLevel"critical"Критический уровень

INFO

Подробное использование системы аудита и типы Sink описаны в Система аудита.

Сигнатурные ошибки

ОшибкаСообщениеОписание
ErrInputTooLargehtml: input size exceeds maximumВвод превышает лимит размера
ErrInvalidHTMLhtml: invalid HTMLНекорректное содержимое HTML
ErrProcessorClosedhtml: processor closedПроцессор закрыт
ErrMaxDepthExceededhtml: max depth exceededПревышена максимальная глубина
ErrInvalidConfightml: invalid configНекорректная конфигурация
ErrProcessingTimeouthtml: processing timeout exceededТайм-аут обработки
ErrFileNotFoundhtml: file not foundФайл не найден
ErrInvalidFilePathhtml: invalid file pathНекорректный путь к файлу
ErrInternalPanichtml: internal panic recoveredВнутренняя паника восстановлена
ErrMultipleConfigshtml: at most one Config may be providedМаксимум один Config

Типы ошибок

InputError

Ошибка, связанная с вводом, содержащая информацию о размере.

go
type InputError struct {
    Op       string // Имя операции
    Size     int    // Фактический размер
    MaxSize  int    // Максимальный лимит
    InputErr error  // Исходная ошибка
}

func (e *InputError) Error() string
func (e *InputError) Unwrap() error // → InputErr (если не nil) или ErrInputTooLarge

ConfigError

Ошибка валидации конфигурации, содержащая информацию о поле.

go
type ConfigError struct {
    Field   string // Имя поля
    Value   any    // Некорректное значение
    Message string // Описание ошибки
}

func (e *ConfigError) Error() string
func (e *ConfigError) Unwrap() error // → ErrInvalidConfig

FileError

Ошибка файловой операции с автоматическим усечением пути для предотвращения утечки.

go
type FileError struct {
    Op      string // Имя операции
    Path    string // Путь к файлу
    FileErr error  // Исходная ошибка
}

func (e *FileError) Error() string        // Безопасный вывод (усечённый путь)
func (e *FileError) SafePath() string     // Возвращает только имя файла
func (e *FileError) Unwrap() error        // → ErrFileNotFound | исходная ошибка | ErrInvalidFilePath
func (e *FileError) MarshalJSON() ([]byte, error) // также усекает путь при JSON-сериализации (предотвращает утечку в ответах API)

Безопасный путь

FileError.Error() и SafePath() возвращают усечённый безопасный путь (только имя файла), предотвращая утечку пути. Для получения полного пути при внутренней отладке можно напрямую обратиться к полю Path.

Шаблон обработки ошибок

go
result, err := html.Extract(data)
if err != nil {
    var inputErr *html.InputError
    var configErr *html.ConfigError
    var fileErr *html.FileError

    switch {
    case errors.Is(err, html.ErrInputTooLarge):
        // Ввод слишком большой
    case errors.Is(err, html.ErrInvalidHTML):
        // Некорректный HTML
    case errors.Is(err, html.ErrFileNotFound):
        // Файл не существует
    case errors.As(err, &inputErr):
        fmt.Printf("Размер %d превышает лимит %d\n", inputErr.Size, inputErr.MaxSize)
    case errors.As(err, &configErr):
        fmt.Printf("Поле конфигурации %s некорректно: %s\n", configErr.Field, configErr.Message)
    case errors.As(err, &fileErr):
        fmt.Printf("Файл: %s\n", fileErr.SafePath())
    }
}