archive

package
v1.3.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 15, 2026 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

Package archive valida la ESTRUCTURA de los JAR/ZIP que se van a instalar como plugins o mods, con límites de recursos.

Nunca descomprime ni extrae nada: solo lee la firma y el directorio central del archivo. Un "zip bomb" declarado se detecta por sus cabeceras y se rechaza sin materializar un solo byte descomprimido, y jamás se escribe en el directorio de ejecución.

Lo que NO garantiza: que el contenido sea seguro, esté libre de código malicioso o sea compatible con el motor. Solo comprueba forma y tamaño.

Index

Constants

View Source
const (
	// DefaultMaxEntries es el número máximo de entradas del archivo.
	DefaultMaxEntries = 4096
	// DefaultMaxUncompressedBytes es la suma máxima de tamaños declarados.
	DefaultMaxUncompressedBytes int64 = 512 << 20
	// DefaultMaxEntryBytes es el tamaño declarado máximo de una entrada.
	DefaultMaxEntryBytes int64 = 128 << 20
	// DefaultMaxRatio es la ratio descomprimido/comprimido máxima tolerada en
	// entradas de 1 MiB o más (compresión "sospechosa").
	DefaultMaxRatio = 200.0
	// DefaultMaxNameLen es la longitud máxima del nombre de una entrada.
	DefaultMaxNameLen = 512
)

Límites por defecto al inspeccionar un JAR/ZIP.

Variables

This section is empty.

Functions

This section is empty.

Types

type Limits

type Limits struct {
	// MaxEntries 0 ⇒ DefaultMaxEntries.
	MaxEntries int
	// MaxUncompressedBytes 0 ⇒ DefaultMaxUncompressedBytes.
	MaxUncompressedBytes int64
	// MaxEntryBytes 0 ⇒ DefaultMaxEntryBytes.
	MaxEntryBytes int64
	// MaxRatio 0 ⇒ DefaultMaxRatio (en entradas de 1 MiB o más).
	MaxRatio float64
	// MaxNameLen 0 ⇒ DefaultMaxNameLen.
	MaxNameLen int
}

Limits son los límites de recursos aplicables a la inspección.

func DefaultLimits

func DefaultLimits() Limits

DefaultLimits devuelve los límites por defecto.

func (Limits) WithDefaults

func (l Limits) WithDefaults() Limits

WithDefaults completa los límites no indicados.

type Report

type Report struct {
	// Entries es el número de entradas del archivo.
	Entries int `json:"entries"`
	// UncompressedBytes es la suma de tamaños declarados (no verificados byte a
	// byte: no se descomprime).
	UncompressedBytes int64 `json:"uncompressed_bytes"`
	// CompressedBytes es la suma de tamaños comprimidos declarados.
	CompressedBytes int64 `json:"compressed_bytes"`
	// MaxRatio es la mayor ratio descomprimido/comprimido observada.
	MaxRatio float64 `json:"max_ratio"`
	// HasManifest indica si contiene META-INF/MANIFEST.MF.
	HasManifest bool `json:"has_manifest"`
	// Descriptor nombra el descriptor de plugin/mod encontrado (vacío si no hay).
	Descriptor string `json:"descriptor,omitempty"`
}

Report resume lo observado en el artefacto. Es informativo y aditivo: se incluye en el documento JSON de `plugin add`.

func Validate

func Validate(file string, size int64, lim Limits) (Report, error)

Validate comprueba que el archivo es un JAR/ZIP estructuralmente válido y respeta los límites. `size` es el tamaño del archivo en disco (ya acotado por el descargador). No extrae nada.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL