From 755a0f6a0d5d7c30ec6dc3f702ddfb0e95c0d204 Mon Sep 17 00:00:00 2001 From: Mischan Toosarani-Hausberger Date: Thu, 12 Sep 2024 14:13:22 +0200 Subject: [PATCH 01/10] feat(server): accept minidumps in a gzip container --- relay-server/src/endpoints/minidump.rs | 82 ++++++++++++++++++++++++-- tests/integration/test_minidump.py | 24 ++++++-- 2 files changed, 97 insertions(+), 9 deletions(-) diff --git a/relay-server/src/endpoints/minidump.rs b/relay-server/src/endpoints/minidump.rs index 80d513d709..80a8e223e2 100644 --- a/relay-server/src/endpoints/minidump.rs +++ b/relay-server/src/endpoints/minidump.rs @@ -1,10 +1,13 @@ use std::convert::Infallible; +use std::io::Cursor; +use std::io::Read; use axum::extract::{DefaultBodyLimit, Request}; use axum::response::IntoResponse; use axum::routing::{post, MethodRouter}; use axum::RequestExt; use bytes::Bytes; +use flate2::read::GzDecoder; use multer::Multipart; use relay_config::Config; use relay_event_schema::protocol::EventId; @@ -31,6 +34,8 @@ const MINIDUMP_FILE_NAME: &str = "Minidump"; const MINIDUMP_MAGIC_HEADER_LE: &[u8] = b"MDMP"; const MINIDUMP_MAGIC_HEADER_BE: &[u8] = b"PMDM"; +const GZIP_MAGIC_HEADER: &[u8] = &[0x1f, 0x8b]; + /// Content types by which standalone uploads can be recognized. const MINIDUMP_RAW_CONTENT_TYPES: &[&str] = &["application/octet-stream", "application/x-dmp"]; @@ -43,6 +48,24 @@ fn validate_minidump(data: &[u8]) -> Result<(), BadStoreRequest> { Ok(()) } +fn validate_gzip_minidump(data: &[u8]) -> Result<(), BadStoreRequest> { + if !data.starts_with(GZIP_MAGIC_HEADER) { + relay_log::trace!("invalid minidump file"); + return Err(BadStoreRequest::InvalidMinidump); + } + + let mut decoder = GzDecoder::new(data); + let mut magic_bytes = [0u8; 4]; + + match decoder.read_exact(&mut magic_bytes) { + Ok(_) => validate_minidump(&magic_bytes), + Err(_) => { + relay_log::trace!("invalid minidump file"); + Err(BadStoreRequest::InvalidMinidump) + } + } +} + fn infer_attachment_type(field_name: Option<&str>) -> AttachmentType { match field_name.unwrap_or("") { MINIDUMP_FIELD_NAME => AttachmentType::Minidump, @@ -97,7 +120,11 @@ async fn extract_multipart( minidump_item.set_payload(ContentType::Minidump, embedded); } - validate_minidump(&minidump_item.payload())?; + if validate_minidump(&minidump_item.payload()).is_err() { + validate_gzip_minidump(&minidump_item.payload())?; + let unzipped = extract_minidump_from_gzip(minidump_item.payload())?; + minidump_item.set_payload(ContentType::Minidump, unzipped); + } let event_id = common::event_id_from_items(&items)?.unwrap_or_else(EventId::new); let mut envelope = Envelope::from_request(Some(event_id), meta); @@ -109,11 +136,31 @@ async fn extract_multipart( Ok(envelope) } -fn extract_raw_minidump(data: Bytes, meta: RequestMeta) -> Result, BadStoreRequest> { - validate_minidump(&data)?; +fn extract_minidump_from_gzip(data: Bytes) -> Result { + let cursor = Cursor::new(data); + let mut decoder = GzDecoder::new(cursor); + let mut buffer = Vec::new(); + match decoder.read_to_end(&mut buffer) { + Ok(_) => Ok(Bytes::from(buffer)), + Err(_) => { + relay_log::trace!("invalid minidump file"); + Err(BadStoreRequest::InvalidMinidump) + } + } +} +fn extract_raw_minidump(data: Bytes, meta: RequestMeta) -> Result, BadStoreRequest> { let mut item = Item::new(ItemType::Attachment); - item.set_payload(ContentType::Minidump, data); + + match validate_minidump(&data) { + Ok(_) => item.set_payload(ContentType::Minidump, data), + Err(_) => { + validate_gzip_minidump(&data)?; + let unzipped = extract_minidump_from_gzip(data)?; + item.set_payload(ContentType::Minidump, unzipped); + } + } + item.set_filename(MINIDUMP_FILE_NAME); item.set_attachment_type(AttachmentType::Minidump); @@ -163,7 +210,10 @@ pub fn route(config: &Config) -> MethodRouter { #[cfg(test)] mod tests { use axum::body::Body; + use flate2::write::GzEncoder; + use flate2::Compression; use relay_config::Config; + use std::io::Write; use crate::utils::{multipart_items, FormDataIter}; @@ -181,6 +231,30 @@ mod tests { assert!(validate_minidump(garbage).is_err()); } + fn encode_gzip(be_minidump: &[u8]) -> Result, Box> { + let mut encoder = GzEncoder::new(Vec::new(), Compression::default()); + encoder.write_all(be_minidump)?; + let compressed = encoder.finish()?; + Ok(compressed) + } + + #[test] + fn test_validate_gzip_minidump() -> Result<(), Box> { + let be_minidump = b"PMDMxxxxxx"; + let compressed = encode_gzip(be_minidump).unwrap(); + assert!(validate_gzip_minidump(&compressed).is_ok()); + + let le_minidump = b"MDMPxxxxxx"; + let compressed = encode_gzip(le_minidump).unwrap(); + assert!(validate_gzip_minidump(&compressed).is_ok()); + + let garbage = b"xxxxxx"; + let compressed = encode_gzip(garbage).unwrap(); + assert!(validate_gzip_minidump(&compressed).is_err()); + + Ok(()) + } + #[tokio::test] async fn test_minidump_multipart_attachments() -> anyhow::Result<()> { let multipart_body: &[u8] = diff --git a/tests/integration/test_minidump.py b/tests/integration/test_minidump.py index ad1368ac97..3518d9cfc2 100644 --- a/tests/integration/test_minidump.py +++ b/tests/integration/test_minidump.py @@ -359,11 +359,25 @@ def test_minidump_invalid_nested_formdata(mini_sentry, relay): relay.send_minidump(project_id=project_id, files=attachments) -@pytest.mark.parametrize("rate_limit", [None, "attachment", "transaction"]) +@pytest.mark.parametrize( + "rate_limit,minidump_filename", + [ + (None, "minidump.dmp"), + ("attachment", "minidump.dmp"), + ("transaction", "minidump.dmp"), + (None, "minidump.dmp.gz"), + ], +) def test_minidump_with_processing( - mini_sentry, relay_with_processing, attachments_consumer, rate_limit + mini_sentry, + relay_with_processing, + attachments_consumer, + rate_limit, + minidump_filename, ): - dmp_path = os.path.join(os.path.dirname(__file__), "fixtures/native/minidump.dmp") + dmp_path = os.path.join( + os.path.dirname(__file__), f"fixtures/native/{minidump_filename}" + ) with open(dmp_path, "rb") as f: content = f.read() @@ -392,7 +406,7 @@ def test_minidump_with_processing( attachments_consumer = attachments_consumer() - attachments = [(MINIDUMP_ATTACHMENT_NAME, "minidump.dmp", content)] + attachments = [(MINIDUMP_ATTACHMENT_NAME, minidump_filename, content)] response = relay.send_minidump(project_id=project_id, files=attachments) attachment = b"" @@ -419,7 +433,7 @@ def test_minidump_with_processing( assert list(message["attachments"]) == [ { "id": attachment_id, - "name": "minidump.dmp", + "name": minidump_filename, "attachment_type": "event.minidump", "chunks": num_chunks, "size": len(content), From ee48d5086490cb76c9d1e3f37abc331e84ca7112 Mon Sep 17 00:00:00 2001 From: Mischan Toosarani-Hausberger Date: Thu, 12 Sep 2024 14:47:46 +0200 Subject: [PATCH 02/10] add gzipped minidump fixture --- .../integration/fixtures/native/minidump.dmp.gz | Bin 0 -> 68606 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/integration/fixtures/native/minidump.dmp.gz diff --git a/tests/integration/fixtures/native/minidump.dmp.gz b/tests/integration/fixtures/native/minidump.dmp.gz new file mode 100644 index 0000000000000000000000000000000000000000..7f7025f8a5b292c23282561c343b2eab0f18326a GIT binary patch literal 68606 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�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 Date: Sat, 21 Sep 2024 10:14:33 +0200 Subject: [PATCH 03/10] introduce decoders for xz, bzip2 and zstd * change the order of validation * separate decoding from validation --- Cargo.lock | 45 +++- Cargo.toml | 2 + relay-server/Cargo.toml | 5 +- relay-server/src/endpoints/common.rs | 3 + relay-server/src/endpoints/minidump.rs | 231 +++++++++++++----- .../fixtures/native/minidump.dmp.bz2 | Bin 0 -> 62201 bytes .../fixtures/native/minidump.dmp.xz | Bin 0 -> 48164 bytes .../fixtures/native/minidump.dmp.zst | Bin 0 -> 64754 bytes 8 files changed, 223 insertions(+), 63 deletions(-) create mode 100644 tests/integration/fixtures/native/minidump.dmp.bz2 create mode 100644 tests/integration/fixtures/native/minidump.dmp.xz create mode 100644 tests/integration/fixtures/native/minidump.dmp.zst diff --git a/Cargo.lock b/Cargo.lock index 1b383fb836..96c3d76c99 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -520,6 +520,27 @@ dependencies = [ "serde", ] +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "cadence" version = "1.4.0" @@ -2084,6 +2105,26 @@ dependencies = [ "winapi", ] +[[package]] +name = "liblzma" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7c45fc6fcf5b527d3cf89c1dee8c327943984b0dc8bfcf6e100473b00969e63" +dependencies = [ + "liblzma-sys", +] + +[[package]] +name = "liblzma-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63117d31458acdb7b406f6c60090aa8e1e7cd6e283f8ee02ce585ed68c53fe39" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "libm" version = "0.2.7" @@ -3702,6 +3743,7 @@ dependencies = [ "backoff", "brotli", "bytes", + "bzip2", "chrono", "criterion", "data-encoding", @@ -3713,6 +3755,7 @@ dependencies = [ "insta", "itertools 0.13.0", "json-forensics", + "liblzma", "mime", "minidump", "multer", @@ -5647,7 +5690,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index c53dcf749a..f582dbfb1f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -69,6 +69,7 @@ bindgen = "0.70.1" brotli = "6.0.0" bytecount = "0.6.0" bytes = "1.4.0" +bzip2 = "0.4.4" cadence = "1.4.0" chrono = { version = "0.4.31", default-features = false, features = [ "std", @@ -104,6 +105,7 @@ ipnetwork = "0.20.0" itertools = "0.13.0" json-forensics = "0.1.1" lru = "0.12.4" +liblzma = "0.3.4" maxminddb = "0.24.0" memchr = "2.7.4" md5 = "0.7.0" diff --git a/relay-server/Cargo.toml b/relay-server/Cargo.toml index 1a787ecde4..f079baea06 100644 --- a/relay-server/Cargo.toml +++ b/relay-server/Cargo.toml @@ -16,7 +16,6 @@ processing = [ "dep:minidump", "dep:symbolic-common", "dep:symbolic-unreal", - "dep:zstd", "relay-cardinality/redis", "relay-config/processing", "relay-kafka/producer", @@ -39,6 +38,7 @@ arc-swap = { workspace = true } backoff = { workspace = true } brotli = { workspace = true } bytes = { workspace = true, features = ["serde"] } +bzip2 = { workspace = true } chrono = { workspace = true, features = ["clock"] } data-encoding = { workspace = true } flate2 = { workspace = true } @@ -48,6 +48,7 @@ hashbrown = { workspace = true } hyper-util = { workspace = true } itertools = { workspace = true } json-forensics = { workspace = true } +liblzma = { workspace = true } mime = { workspace = true } minidump = { workspace = true, optional = true } multer = { workspace = true } @@ -121,7 +122,7 @@ tower-http = { workspace = true, default-features = false, features = [ ] } url = { workspace = true, features = ["serde"] } uuid = { workspace = true, features = ["v5"] } -zstd = { workspace = true, optional = true } +zstd = { workspace = true } semver = { workspace = true } [dev-dependencies] diff --git a/relay-server/src/endpoints/common.rs b/relay-server/src/endpoints/common.rs index 8ca600ef7c..c9da3cdbe3 100644 --- a/relay-server/src/endpoints/common.rs +++ b/relay-server/src/endpoints/common.rs @@ -67,6 +67,9 @@ pub enum BadStoreRequest { #[error("missing minidump")] MissingMinidump, + #[error("invalid compression container")] + InvalidCompressionContainer(#[from] std::io::Error), + #[error("invalid event id")] InvalidEventId, diff --git a/relay-server/src/endpoints/minidump.rs b/relay-server/src/endpoints/minidump.rs index 80a8e223e2..9191eb784e 100644 --- a/relay-server/src/endpoints/minidump.rs +++ b/relay-server/src/endpoints/minidump.rs @@ -1,20 +1,26 @@ use std::convert::Infallible; -use std::io::Cursor; use std::io::Read; +use std::io::{Cursor, Error}; use axum::extract::{DefaultBodyLimit, Request}; use axum::response::IntoResponse; use axum::routing::{post, MethodRouter}; use axum::RequestExt; use bytes::Bytes; +use bzip2::read::BzDecoder; use flate2::read::GzDecoder; +use liblzma::read::XzDecoder; use multer::Multipart; +use once_cell::sync::Lazy; +use regex::Regex; use relay_config::Config; use relay_event_schema::protocol::EventId; +use zstd::stream::Decoder as ZstdDecoder; use crate::constants::{ITEM_NAME_BREADCRUMBS1, ITEM_NAME_BREADCRUMBS2, ITEM_NAME_EVENT}; use crate::endpoints::common::{self, BadStoreRequest, TextResponse}; -use crate::envelope::{AttachmentType, ContentType, Envelope, Item, ItemType}; +use crate::envelope::ContentType::Minidump; +use crate::envelope::{AttachmentType, Envelope, Item, ItemType}; use crate::extractors::{RawContentType, Remote, RequestMeta}; use crate::service::ServiceState; use crate::utils; @@ -34,11 +40,13 @@ const MINIDUMP_FILE_NAME: &str = "Minidump"; const MINIDUMP_MAGIC_HEADER_LE: &[u8] = b"MDMP"; const MINIDUMP_MAGIC_HEADER_BE: &[u8] = b"PMDM"; -const GZIP_MAGIC_HEADER: &[u8] = &[0x1f, 0x8b]; - /// Content types by which standalone uploads can be recognized. const MINIDUMP_RAW_CONTENT_TYPES: &[&str] = &["application/octet-stream", "application/x-dmp"]; +/// Finds file extensions for the currently supported compression containers +static CONTAINER_EXTENSIONS_RE: Lazy = + Lazy::new(|| Regex::new(r"\.(gz|bz2|zst|xz)$").unwrap()); + fn validate_minidump(data: &[u8]) -> Result<(), BadStoreRequest> { if !data.starts_with(MINIDUMP_MAGIC_HEADER_LE) && !data.starts_with(MINIDUMP_MAGIC_HEADER_BE) { relay_log::trace!("invalid minidump file"); @@ -48,24 +56,67 @@ fn validate_minidump(data: &[u8]) -> Result<(), BadStoreRequest> { Ok(()) } -fn validate_gzip_minidump(data: &[u8]) -> Result<(), BadStoreRequest> { - if !data.starts_with(GZIP_MAGIC_HEADER) { - relay_log::trace!("invalid minidump file"); - return Err(BadStoreRequest::InvalidMinidump); +/// Convenience wrapper to let a decoder decode its full input into a buffer +fn run_decoder(decoder: &mut Box) -> Result, Error> { + let mut buffer = Vec::new(); + match decoder.read_to_end(&mut buffer) { + Ok(_) => Ok(buffer), + Err(err) => Err(err), } +} - let mut decoder = GzDecoder::new(data); - let mut magic_bytes = [0u8; 4]; +/// Creates a decoder based on the magic bytes the minidump payload +fn decoder_from(minidump_data: Bytes) -> Option> { + if minidump_data.starts_with(b"\x1F\x8B") { + return Some(Box::new(GzDecoder::new(Cursor::new(minidump_data)))); + } else if minidump_data.starts_with(b"\xFD\x37\x7A\x58\x5A\x00") { + return Some(Box::new(XzDecoder::new(Cursor::new(minidump_data)))); + } else if minidump_data.starts_with(b"\x42\x5A\x68") { + return Some(Box::new(BzDecoder::new(Cursor::new(minidump_data)))); + } else if minidump_data.starts_with(b"\x28\xB5\x2F\xFD") { + return Some(Box::new( + ZstdDecoder::new(Cursor::new(minidump_data)).unwrap(), + )); + } - match decoder.read_exact(&mut magic_bytes) { - Ok(_) => validate_minidump(&magic_bytes), - Err(_) => { - relay_log::trace!("invalid minidump file"); - Err(BadStoreRequest::InvalidMinidump) + None +} + +/// Tries to decode a minidump using any of the supported compression formats +/// or returns the provided minidump payload untouched if no format where detected +fn decode_minidump(minidump_data: Bytes) -> Result { + match decoder_from(minidump_data.clone()) { + Some(mut decoder) => { + match run_decoder(&mut decoder) { + Ok(decoded) => Ok(Bytes::from(decoded)), + Err(err) => { + // we detected a compression container but failed to decode it + relay_log::trace!("invalid compression container"); + Err(BadStoreRequest::InvalidCompressionContainer(err)) + } + } + } + None => { + // this means we haven't detected any compression container + // proceed to process the payload untouched (as a plain minidump). + Ok(minidump_data) } } } +/// Removes any compression container file extensions from the minidump +/// filename so it can be updated in the item. Otherwise, attachments that +/// have been decoded would still show the extension in the UI, which is misleading. +fn remove_container_extension(filename: String) -> String { + let lc_filename = filename.to_ascii_lowercase(); + let re_find_opt = CONTAINER_EXTENSIONS_RE.find(lc_filename.as_str()); + if let Some(re_find) = re_find_opt { + filename[..re_find.start()].to_owned() + } else { + filename + } +} + fn infer_attachment_type(field_name: Option<&str>) -> AttachmentType { match field_name.unwrap_or("") { MINIDUMP_FIELD_NAME => AttachmentType::Minidump, @@ -117,13 +168,15 @@ async fn extract_multipart( let embedded_opt = extract_embedded_minidump(minidump_item.payload()).await?; if let Some(embedded) = embedded_opt { - minidump_item.set_payload(ContentType::Minidump, embedded); + minidump_item.set_payload(Minidump, embedded); } - if validate_minidump(&minidump_item.payload()).is_err() { - validate_gzip_minidump(&minidump_item.payload())?; - let unzipped = extract_minidump_from_gzip(minidump_item.payload())?; - minidump_item.set_payload(ContentType::Minidump, unzipped); + minidump_item.set_payload(Minidump, decode_minidump(minidump_item.payload())?); + + validate_minidump(&minidump_item.payload())?; + + if let Some(minidump_filename) = minidump_item.filename() { + minidump_item.set_filename(remove_container_extension(minidump_filename.to_string())); } let event_id = common::event_id_from_items(&items)?.unwrap_or_else(EventId::new); @@ -136,31 +189,11 @@ async fn extract_multipart( Ok(envelope) } -fn extract_minidump_from_gzip(data: Bytes) -> Result { - let cursor = Cursor::new(data); - let mut decoder = GzDecoder::new(cursor); - let mut buffer = Vec::new(); - match decoder.read_to_end(&mut buffer) { - Ok(_) => Ok(Bytes::from(buffer)), - Err(_) => { - relay_log::trace!("invalid minidump file"); - Err(BadStoreRequest::InvalidMinidump) - } - } -} - fn extract_raw_minidump(data: Bytes, meta: RequestMeta) -> Result, BadStoreRequest> { let mut item = Item::new(ItemType::Attachment); - match validate_minidump(&data) { - Ok(_) => item.set_payload(ContentType::Minidump, data), - Err(_) => { - validate_gzip_minidump(&data)?; - let unzipped = extract_minidump_from_gzip(data)?; - item.set_payload(ContentType::Minidump, unzipped); - } - } - + item.set_payload(Minidump, decode_minidump(data)?); + validate_minidump(&item.payload())?; item.set_filename(MINIDUMP_FILE_NAME); item.set_attachment_type(AttachmentType::Minidump); @@ -209,13 +242,17 @@ pub fn route(config: &Config) -> MethodRouter { #[cfg(test)] mod tests { + use crate::envelope::ContentType; + use crate::utils::{multipart_items, FormDataIter}; use axum::body::Body; + use bzip2::write::BzEncoder; + use bzip2::Compression as BzCompression; use flate2::write::GzEncoder; - use flate2::Compression; + use flate2::Compression as GzCompression; + use liblzma::write::XzEncoder; use relay_config::Config; use std::io::Write; - - use crate::utils::{multipart_items, FormDataIter}; + use zstd::stream::Encoder as ZstdEncoder; use super::*; @@ -231,26 +268,101 @@ mod tests { assert!(validate_minidump(garbage).is_err()); } - fn encode_gzip(be_minidump: &[u8]) -> Result, Box> { - let mut encoder = GzEncoder::new(Vec::new(), Compression::default()); + type EncodeFunction = fn(&[u8]) -> Result>; + + fn encode_gzip(be_minidump: &[u8]) -> Result> { + let mut encoder = GzEncoder::new(Vec::new(), GzCompression::default()); + encoder.write_all(be_minidump)?; + let compressed = encoder.finish()?; + Ok(Bytes::from(compressed)) + } + fn encode_bzip(be_minidump: &[u8]) -> Result> { + let mut encoder = BzEncoder::new(Vec::new(), BzCompression::default()); encoder.write_all(be_minidump)?; let compressed = encoder.finish()?; - Ok(compressed) + Ok(Bytes::from(compressed)) + } + fn encode_xz(be_minidump: &[u8]) -> Result> { + let mut encoder = XzEncoder::new(Vec::new(), 6); + encoder.write_all(be_minidump)?; + let compressed = encoder.finish()?; + Ok(Bytes::from(compressed)) + } + fn encode_zst(be_minidump: &[u8]) -> Result> { + let mut encoder = ZstdEncoder::new(Vec::new(), 0)?; + encoder.write_all(be_minidump)?; + let compressed = encoder.finish()?; + Ok(Bytes::from(compressed)) } #[test] - fn test_validate_gzip_minidump() -> Result<(), Box> { - let be_minidump = b"PMDMxxxxxx"; - let compressed = encode_gzip(be_minidump).unwrap(); - assert!(validate_gzip_minidump(&compressed).is_ok()); + fn test_validate_encoded_minidump() -> Result<(), Box> { + let encoders: Vec = vec![encode_gzip, encode_zst, encode_bzip, encode_xz]; + + for encoder in &encoders { + let be_minidump = b"PMDMxxxxxx"; + let compressed = encoder(be_minidump)?; + let mut decoder = decoder_from(compressed).unwrap(); + assert!(run_decoder(&mut decoder).is_ok()); + + let le_minidump = b"MDMPxxxxxx"; + let compressed = encoder(le_minidump)?; + let mut decoder = decoder_from(compressed).unwrap(); + assert!(run_decoder(&mut decoder).is_ok()); + + let garbage = b"xxxxxx"; + let compressed = encoder(garbage)?; + let mut decoder = decoder_from(compressed).unwrap(); + let decoded = run_decoder(&mut decoder); + assert!(decoded.is_ok()); + assert!(validate_minidump(&decoded.unwrap()).is_err()); + } - let le_minidump = b"MDMPxxxxxx"; - let compressed = encode_gzip(le_minidump).unwrap(); - assert!(validate_gzip_minidump(&compressed).is_ok()); + Ok(()) + } - let garbage = b"xxxxxx"; - let compressed = encode_gzip(garbage).unwrap(); - assert!(validate_gzip_minidump(&compressed).is_err()); + #[test] + fn test_remove_container_extension() -> Result<(), Box> { + assert_eq!( + remove_container_extension(String::from("minidump")), + "minidump" + ); + assert_eq!( + remove_container_extension(String::from("minidump.gz")), + "minidump" + ); + assert_eq!( + remove_container_extension(String::from("minidump.bz2")), + "minidump" + ); + assert_eq!( + remove_container_extension(String::from("minidump.xz")), + "minidump" + ); + assert_eq!( + remove_container_extension(String::from("minidump.zst")), + "minidump" + ); + assert_eq!( + remove_container_extension(String::from("minidump.dmp")), + "minidump.dmp" + ); + assert_eq!( + remove_container_extension(String::from("minidump.dmp.gz")), + "minidump.dmp" + ); + assert_eq!( + remove_container_extension(String::from("minidump.dmp.bz2")), + "minidump.dmp" + ); + assert_eq!( + remove_container_extension(String::from("minidump.dmp.xz")), + "minidump.dmp" + ); + assert_eq!( + remove_container_extension(String::from("minidump.dmp.zst")), + "minidump.dmp" + ); Ok(()) } @@ -284,8 +396,7 @@ mod tests { "content-type", "multipart/form-data; boundary=---MultipartBoundary-sQ95dYmFvVzJ2UcOSdGPBkqrW0syf0Uw---", ) - .body(Body::from(multipart_body)) - .unwrap(); + .body(Body::from(multipart_body))?; let config = Config::default(); diff --git a/tests/integration/fixtures/native/minidump.dmp.bz2 b/tests/integration/fixtures/native/minidump.dmp.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..3531c59567bd9405daa6c85eb04f922eef1f070b GIT binary patch literal 62201 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%0Ak0x7`J&rSiS%DrDq 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 literal 0 HcmV?d00001 diff --git a/tests/integration/fixtures/native/minidump.dmp.xz b/tests/integration/fixtures/native/minidump.dmp.xz new file mode 100644 index 0000000000000000000000000000000000000000..7f3b6db7e66eee769e50d76fa56909098d914148 GIT binary patch literal 48164 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 gT`b^WV-<>r#WI$5D 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 z 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 Date: Mon, 23 Sep 2024 07:43:18 +0200 Subject: [PATCH 04/10] Add changelog and test-cases. --- CHANGELOG.md | 1 + tests/integration/test_minidump.py | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8328a8462f..bd252b9d8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Add a config option to add default tags to all Relay Sentry events. ([#3944](https://github.com/getsentry/relay/pull/3944)) - Automatically derive `client.address` and `user.geo` for standalone spans. ([#4047](https://github.com/getsentry/relay/pull/4047)) +- Add support for uploading compressed (gzip, xz, zstd, bzip2) minidumps. ([#4029](https://github.com/getsentry/relay/pull/4029)) ## 24.9.0 diff --git a/tests/integration/test_minidump.py b/tests/integration/test_minidump.py index 3518d9cfc2..d1d8722a77 100644 --- a/tests/integration/test_minidump.py +++ b/tests/integration/test_minidump.py @@ -366,6 +366,9 @@ def test_minidump_invalid_nested_formdata(mini_sentry, relay): ("attachment", "minidump.dmp"), ("transaction", "minidump.dmp"), (None, "minidump.dmp.gz"), + (None, "minidump.dmp.xz"), + (None, "minidump.dmp.bz2"), + (None, "minidump.dmp.zst"), ], ) def test_minidump_with_processing( @@ -435,6 +438,7 @@ def test_minidump_with_processing( "id": attachment_id, "name": minidump_filename, "attachment_type": "event.minidump", + "content_type": "application/x-dmp", "chunks": num_chunks, "size": len(content), "rate_limited": rate_limit == "attachment", From 943453ce07e69f849fc2f2bf46fac10c17b56ede Mon Sep 17 00:00:00 2001 From: Mischan Toosarani-Hausberger Date: Mon, 23 Sep 2024 08:35:46 +0200 Subject: [PATCH 05/10] Don't pass on actual "compressed" filename in integration tests. --- tests/integration/test_minidump.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/test_minidump.py b/tests/integration/test_minidump.py index d1d8722a77..e1683400c5 100644 --- a/tests/integration/test_minidump.py +++ b/tests/integration/test_minidump.py @@ -409,7 +409,7 @@ def test_minidump_with_processing( attachments_consumer = attachments_consumer() - attachments = [(MINIDUMP_ATTACHMENT_NAME, minidump_filename, content)] + attachments = [(MINIDUMP_ATTACHMENT_NAME, "minidump.dmp", content)] response = relay.send_minidump(project_id=project_id, files=attachments) attachment = b"" @@ -436,7 +436,7 @@ def test_minidump_with_processing( assert list(message["attachments"]) == [ { "id": attachment_id, - "name": minidump_filename, + "name": "minidump.dmp", "attachment_type": "event.minidump", "content_type": "application/x-dmp", "chunks": num_chunks, From 56cbf2cf51398962e0acfd874e9c7c445f8de98c Mon Sep 17 00:00:00 2001 From: Mischan Toosarani-Hausberger Date: Mon, 23 Sep 2024 11:44:20 +0200 Subject: [PATCH 06/10] Change test to retrieve attachment chunk polling against uncompressed content. --- tests/integration/test_minidump.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/tests/integration/test_minidump.py b/tests/integration/test_minidump.py index e1683400c5..b4c4bba378 100644 --- a/tests/integration/test_minidump.py +++ b/tests/integration/test_minidump.py @@ -378,12 +378,18 @@ def test_minidump_with_processing( rate_limit, minidump_filename, ): - dmp_path = os.path.join( - os.path.dirname(__file__), f"fixtures/native/{minidump_filename}" - ) + dmp_path = os.path.join(os.path.dirname(__file__), "fixtures/native/minidump.dmp") with open(dmp_path, "rb") as f: content = f.read() + # if we test a compressed minidump fixture we load both, the plain dump and the compressed one. + if minidump_filename != "minidump.dmp": + compressed_dmp_path = os.path.join( + os.path.dirname(__file__), f"fixtures/native/{minidump_filename}" + ) + with open(compressed_dmp_path, "rb") as f: + compressed_content = f.read() + relay = relay_with_processing() project_id = 42 @@ -409,7 +415,16 @@ def test_minidump_with_processing( attachments_consumer = attachments_consumer() - attachments = [(MINIDUMP_ATTACHMENT_NAME, "minidump.dmp", content)] + # if we test a compressed minidump fixture we upload the compressed content + # but retrieve the uncompressed minidump content from the `attachments_consumer` below. + attachments = [ + ( + MINIDUMP_ATTACHMENT_NAME, + minidump_filename, + content if minidump_filename == "minidump.dmp" else compressed_content, + ) + ] + response = relay.send_minidump(project_id=project_id, files=attachments) attachment = b"" From a1d117300ead5f989dada37efa3459cf3e364c96 Mon Sep 17 00:00:00 2001 From: Mischan Toosarani-Hausberger Date: Mon, 23 Sep 2024 13:48:01 +0200 Subject: [PATCH 07/10] Adapt to review-feedback * remove regex for container file-extensions * remove unnecessary Err match * make std::io::Error only a source for InvalidCompressionContainer --- relay-server/src/endpoints/common.rs | 2 +- relay-server/src/endpoints/minidump.rs | 62 ++++++++------------------ 2 files changed, 19 insertions(+), 45 deletions(-) diff --git a/relay-server/src/endpoints/common.rs b/relay-server/src/endpoints/common.rs index c9da3cdbe3..e16afb6025 100644 --- a/relay-server/src/endpoints/common.rs +++ b/relay-server/src/endpoints/common.rs @@ -68,7 +68,7 @@ pub enum BadStoreRequest { MissingMinidump, #[error("invalid compression container")] - InvalidCompressionContainer(#[from] std::io::Error), + InvalidCompressionContainer(#[source] std::io::Error), #[error("invalid event id")] InvalidEventId, diff --git a/relay-server/src/endpoints/minidump.rs b/relay-server/src/endpoints/minidump.rs index 9191eb784e..f7a2339d31 100644 --- a/relay-server/src/endpoints/minidump.rs +++ b/relay-server/src/endpoints/minidump.rs @@ -11,8 +11,6 @@ use bzip2::read::BzDecoder; use flate2::read::GzDecoder; use liblzma::read::XzDecoder; use multer::Multipart; -use once_cell::sync::Lazy; -use regex::Regex; use relay_config::Config; use relay_event_schema::protocol::EventId; use zstd::stream::Decoder as ZstdDecoder; @@ -43,10 +41,6 @@ const MINIDUMP_MAGIC_HEADER_BE: &[u8] = b"PMDM"; /// Content types by which standalone uploads can be recognized. const MINIDUMP_RAW_CONTENT_TYPES: &[&str] = &["application/octet-stream", "application/x-dmp"]; -/// Finds file extensions for the currently supported compression containers -static CONTAINER_EXTENSIONS_RE: Lazy = - Lazy::new(|| Regex::new(r"\.(gz|bz2|zst|xz)$").unwrap()); - fn validate_minidump(data: &[u8]) -> Result<(), BadStoreRequest> { if !data.starts_with(MINIDUMP_MAGIC_HEADER_LE) && !data.starts_with(MINIDUMP_MAGIC_HEADER_BE) { relay_log::trace!("invalid minidump file"); @@ -59,10 +53,8 @@ fn validate_minidump(data: &[u8]) -> Result<(), BadStoreRequest> { /// Convenience wrapper to let a decoder decode its full input into a buffer fn run_decoder(decoder: &mut Box) -> Result, Error> { let mut buffer = Vec::new(); - match decoder.read_to_end(&mut buffer) { - Ok(_) => Ok(buffer), - Err(err) => Err(err), - } + decoder.read_to_end(&mut buffer)?; + Ok(buffer) } /// Creates a decoder based on the magic bytes the minidump payload @@ -107,11 +99,11 @@ fn decode_minidump(minidump_data: Bytes) -> Result { /// Removes any compression container file extensions from the minidump /// filename so it can be updated in the item. Otherwise, attachments that /// have been decoded would still show the extension in the UI, which is misleading. -fn remove_container_extension(filename: String) -> String { - let lc_filename = filename.to_ascii_lowercase(); - let re_find_opt = CONTAINER_EXTENSIONS_RE.find(lc_filename.as_str()); - if let Some(re_find) = re_find_opt { - filename[..re_find.start()].to_owned() +fn remove_container_extension(filename: &str) -> &str { + if filename.ends_with("gz") || filename.ends_with("xz") { + &filename[..filename.len() - 3] + } else if filename.ends_with("bz2") || filename.ends_with("zst") { + &filename[..filename.len() - 4] } else { filename } @@ -176,7 +168,7 @@ async fn extract_multipart( validate_minidump(&minidump_item.payload())?; if let Some(minidump_filename) = minidump_item.filename() { - minidump_item.set_filename(remove_container_extension(minidump_filename.to_string())); + minidump_item.set_filename(remove_container_extension(minidump_filename).to_owned()); } let event_id = common::event_id_from_items(&items)?.unwrap_or_else(EventId::new); @@ -323,44 +315,26 @@ mod tests { #[test] fn test_remove_container_extension() -> Result<(), Box> { + assert_eq!(remove_container_extension("minidump"), "minidump"); + assert_eq!(remove_container_extension("minidump.gz"), "minidump"); + assert_eq!(remove_container_extension("minidump.bz2"), "minidump"); + assert_eq!(remove_container_extension("minidump.xz"), "minidump"); + assert_eq!(remove_container_extension("minidump.zst"), "minidump"); + assert_eq!(remove_container_extension("minidump.dmp"), "minidump.dmp"); assert_eq!( - remove_container_extension(String::from("minidump")), - "minidump" - ); - assert_eq!( - remove_container_extension(String::from("minidump.gz")), - "minidump" - ); - assert_eq!( - remove_container_extension(String::from("minidump.bz2")), - "minidump" - ); - assert_eq!( - remove_container_extension(String::from("minidump.xz")), - "minidump" - ); - assert_eq!( - remove_container_extension(String::from("minidump.zst")), - "minidump" - ); - assert_eq!( - remove_container_extension(String::from("minidump.dmp")), - "minidump.dmp" - ); - assert_eq!( - remove_container_extension(String::from("minidump.dmp.gz")), + remove_container_extension("minidump.dmp.gz"), "minidump.dmp" ); assert_eq!( - remove_container_extension(String::from("minidump.dmp.bz2")), + remove_container_extension("minidump.dmp.bz2"), "minidump.dmp" ); assert_eq!( - remove_container_extension(String::from("minidump.dmp.xz")), + remove_container_extension("minidump.dmp.xz"), "minidump.dmp" ); assert_eq!( - remove_container_extension(String::from("minidump.dmp.zst")), + remove_container_extension("minidump.dmp.zst"), "minidump.dmp" ); From 51bd478b9c15b28f8e0af32f229af4910beeac7b Mon Sep 17 00:00:00 2001 From: Mischan Toosarani-Hausberger Date: Tue, 24 Sep 2024 12:06:48 +0200 Subject: [PATCH 08/10] Further changes from review-feedback * extract magic-header constants * handle error in ZstdDecoder creation with a log and returning None * rewrite removal of container file-extensions with idiomatic iterator mapping. --- relay-server/src/endpoints/minidump.rs | 35 +++++++++++++++----------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/relay-server/src/endpoints/minidump.rs b/relay-server/src/endpoints/minidump.rs index f7a2339d31..35e945d7fc 100644 --- a/relay-server/src/endpoints/minidump.rs +++ b/relay-server/src/endpoints/minidump.rs @@ -38,6 +38,12 @@ const MINIDUMP_FILE_NAME: &str = "Minidump"; const MINIDUMP_MAGIC_HEADER_LE: &[u8] = b"MDMP"; const MINIDUMP_MAGIC_HEADER_BE: &[u8] = b"PMDM"; +/// Magic headers of the currently supported minidump compression containers. +const GZIP_MAGIC_HEADER: &[u8] = b"\x1F\x8B"; +const XZ_MAGIC_HEADER: &[u8] = b"\xFD\x37\x7A\x58\x5A\x00"; +const BZIP2_MAGIC_HEADER: &[u8] = b"\x42\x5A\x68"; +const ZSTD_MAGIC_HEADER: &[u8] = b"\x28\xB5\x2F\xFD"; + /// Content types by which standalone uploads can be recognized. const MINIDUMP_RAW_CONTENT_TYPES: &[&str] = &["application/octet-stream", "application/x-dmp"]; @@ -59,16 +65,20 @@ fn run_decoder(decoder: &mut Box) -> Result, Error> { /// Creates a decoder based on the magic bytes the minidump payload fn decoder_from(minidump_data: Bytes) -> Option> { - if minidump_data.starts_with(b"\x1F\x8B") { + if minidump_data.starts_with(GZIP_MAGIC_HEADER) { return Some(Box::new(GzDecoder::new(Cursor::new(minidump_data)))); - } else if minidump_data.starts_with(b"\xFD\x37\x7A\x58\x5A\x00") { + } else if minidump_data.starts_with(XZ_MAGIC_HEADER) { return Some(Box::new(XzDecoder::new(Cursor::new(minidump_data)))); - } else if minidump_data.starts_with(b"\x42\x5A\x68") { + } else if minidump_data.starts_with(BZIP2_MAGIC_HEADER) { return Some(Box::new(BzDecoder::new(Cursor::new(minidump_data)))); - } else if minidump_data.starts_with(b"\x28\xB5\x2F\xFD") { - return Some(Box::new( - ZstdDecoder::new(Cursor::new(minidump_data)).unwrap(), - )); + } else if minidump_data.starts_with(ZSTD_MAGIC_HEADER) { + return match ZstdDecoder::new(Cursor::new(minidump_data)) { + Ok(decoder) => Some(Box::new(decoder)), + Err(err) => { + relay_log::trace!("failed to create ZstdDecoder: {err}"); + None + } + }; } None @@ -100,13 +110,10 @@ fn decode_minidump(minidump_data: Bytes) -> Result { /// filename so it can be updated in the item. Otherwise, attachments that /// have been decoded would still show the extension in the UI, which is misleading. fn remove_container_extension(filename: &str) -> &str { - if filename.ends_with("gz") || filename.ends_with("xz") { - &filename[..filename.len() - 3] - } else if filename.ends_with("bz2") || filename.ends_with("zst") { - &filename[..filename.len() - 4] - } else { - filename - } + [".gz", ".xz", ".bz2", ".zst"] + .into_iter() + .find_map(|suffix| filename.strip_suffix(suffix)) + .unwrap_or(filename) } fn infer_attachment_type(field_name: Option<&str>) -> AttachmentType { From f81b788157a3ca33247211c297fa644d57423374 Mon Sep 17 00:00:00 2001 From: Mischan Toosarani-Hausberger Date: Tue, 24 Sep 2024 12:31:30 +0200 Subject: [PATCH 09/10] log ZstdDecoder creation error with error!() --- relay-server/src/endpoints/minidump.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/relay-server/src/endpoints/minidump.rs b/relay-server/src/endpoints/minidump.rs index 35e945d7fc..164eb5a34a 100644 --- a/relay-server/src/endpoints/minidump.rs +++ b/relay-server/src/endpoints/minidump.rs @@ -1,7 +1,3 @@ -use std::convert::Infallible; -use std::io::Read; -use std::io::{Cursor, Error}; - use axum::extract::{DefaultBodyLimit, Request}; use axum::response::IntoResponse; use axum::routing::{post, MethodRouter}; @@ -13,6 +9,10 @@ use liblzma::read::XzDecoder; use multer::Multipart; use relay_config::Config; use relay_event_schema::protocol::EventId; +use std::convert::Infallible; +use std::error::Error; +use std::io::Cursor; +use std::io::Read; use zstd::stream::Decoder as ZstdDecoder; use crate::constants::{ITEM_NAME_BREADCRUMBS1, ITEM_NAME_BREADCRUMBS2, ITEM_NAME_EVENT}; @@ -57,7 +57,7 @@ fn validate_minidump(data: &[u8]) -> Result<(), BadStoreRequest> { } /// Convenience wrapper to let a decoder decode its full input into a buffer -fn run_decoder(decoder: &mut Box) -> Result, Error> { +fn run_decoder(decoder: &mut Box) -> std::io::Result> { let mut buffer = Vec::new(); decoder.read_to_end(&mut buffer)?; Ok(buffer) @@ -74,8 +74,8 @@ fn decoder_from(minidump_data: Bytes) -> Option> { } else if minidump_data.starts_with(ZSTD_MAGIC_HEADER) { return match ZstdDecoder::new(Cursor::new(minidump_data)) { Ok(decoder) => Some(Box::new(decoder)), - Err(err) => { - relay_log::trace!("failed to create ZstdDecoder: {err}"); + Err(ref err) => { + relay_log::error!(error = err as &dyn Error, "failed to create ZstdDecoder"); None } }; From 387f7ac4192fa624f3607ada172cf7e5eb71c760 Mon Sep 17 00:00:00 2001 From: Mischan Toosarani-Hausberger Date: Tue, 24 Sep 2024 15:56:37 +0200 Subject: [PATCH 10/10] per-constant inline docs for the magic-headers. --- relay-server/src/endpoints/minidump.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/relay-server/src/endpoints/minidump.rs b/relay-server/src/endpoints/minidump.rs index 164eb5a34a..577b5bc6d6 100644 --- a/relay-server/src/endpoints/minidump.rs +++ b/relay-server/src/endpoints/minidump.rs @@ -38,10 +38,13 @@ const MINIDUMP_FILE_NAME: &str = "Minidump"; const MINIDUMP_MAGIC_HEADER_LE: &[u8] = b"MDMP"; const MINIDUMP_MAGIC_HEADER_BE: &[u8] = b"PMDM"; -/// Magic headers of the currently supported minidump compression containers. +/// Magic bytes for gzip compressed minidump containers. const GZIP_MAGIC_HEADER: &[u8] = b"\x1F\x8B"; +/// Magic bytes for xz compressed minidump containers. const XZ_MAGIC_HEADER: &[u8] = b"\xFD\x37\x7A\x58\x5A\x00"; +/// Magic bytes for bzip2 compressed minidump containers. const BZIP2_MAGIC_HEADER: &[u8] = b"\x42\x5A\x68"; +/// Magic bytes for zstd compressed minidump containers. const ZSTD_MAGIC_HEADER: &[u8] = b"\x28\xB5\x2F\xFD"; /// Content types by which standalone uploads can be recognized.