Skip to main content

java_serialization/
lib.rs

1//! Java object serialization stream parser.
2//!
3//! Parses Java serialization streams according to the Java Object Serialization
4//! Specification. Supports all type codes (TC_OBJECT, TC_ARRAY, TC_CLASSDESC,
5//! TC_ENUM, TC_PROXYCLASSDESC, etc.), block data, annotations, and handle
6//! references.
7//!
8//! Automatically detects and handles JDK 8u20 exploit payloads that omit a
9//! TC_ENDBLOCKDATA byte, retrying with the missing byte inserted.
10//!
11//! # Example
12//!
13//! ```
14//! use java_serialization::parse_serialization_stream;
15//!
16//! // Minimal valid Java serialization stream: magic 0xACED, version 5
17//! let data: &[u8] = &[0xAC, 0xED, 0x00, 0x05];
18//! let (remaining, stream) = parse_serialization_stream(data).unwrap();
19//! assert!(remaining.is_empty());
20//! assert_eq!(stream.version, 5);
21//! ```
22
23mod constants;
24mod handle;
25mod parser;
26mod types;
27
28pub use parser::parse_serialization_stream;
29pub use parser::preprocess_jdk8u20;
30pub use types::*;
31
32// Re-export constants for convenience
33pub use constants::*;