From ee9ce44613b34b20876c4e67fa5665ec54d9b63a Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Sat, 16 Nov 2024 23:02:42 +0100 Subject: [PATCH 1/2] rss: Remove explicit/duplicate XML escaping XML tags inside `CDATA` sections don't need to be escaped, so this explicit escaping step led to an unnecessary duplicate escaping being applied. --- Cargo.lock | 1 - Cargo.toml | 1 - ...__worker__rss__sync_crates_feed__sync_crates_feed-2.snap | 2 +- ...worker__rss__sync_updates_feed__sync_updates_feed-2.snap | 3 ++- src/worker/jobs/rss/sync_crates_feed.rs | 6 +----- src/worker/jobs/rss/sync_updates_feed.rs | 6 +----- 6 files changed, 5 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 823472bd9f5..b9975ad72f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1087,7 +1087,6 @@ dependencies = [ "paste", "postgres-native-tls", "prometheus", - "quick-xml 0.37.0", "rand", "regex", "reqwest 0.12.9", diff --git a/Cargo.toml b/Cargo.toml index 82baad69bdc..979c5031bcb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -95,7 +95,6 @@ parking_lot = "=0.12.3" paste = "=1.0.15" postgres-native-tls = "=0.5.0" prometheus = { version = "=0.13.4", default-features = false } -quick-xml = "=0.37.0" rand = "=0.8.5" reqwest = { version = "=0.12.9", features = ["gzip", "json"] } rss = { version = "=2.0.10", default-features = false, features = ["atom"] } diff --git a/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_crates_feed__sync_crates_feed-2.snap b/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_crates_feed__sync_crates_feed-2.snap index f866838e1c6..616fd59e19d 100644 --- a/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_crates_feed__sync_crates_feed-2.snap +++ b/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_crates_feed__sync_crates_feed-2.snap @@ -21,7 +21,7 @@ snapshot_kind: text New crate created: baz https://crates.io/crates/baz - + ]]> https://crates.io/crates/baz Fri, 21 Jun 2024 17:01:33 +0000 baz diff --git a/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_updates_feed__sync_updates_feed-2.snap b/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_updates_feed__sync_updates_feed-2.snap index 6a962f4d544..a9025763c39 100644 --- a/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_updates_feed__sync_updates_feed-2.snap +++ b/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_updates_feed__sync_updates_feed-2.snap @@ -1,6 +1,7 @@ --- source: src/tests/worker/rss/sync_updates_feed.rs expression: content +snapshot_kind: text --- @@ -29,7 +30,7 @@ expression: content New crate version published: bar v3.0.0-beta.1 https://crates.io/crates/bar/3.0.0-beta.1 - + ]]> https://crates.io/crates/bar/3.0.0-beta.1 Fri, 21 Jun 2024 17:03:45 +0000 bar diff --git a/src/worker/jobs/rss/sync_crates_feed.rs b/src/worker/jobs/rss/sync_crates_feed.rs index 12964cfa281..1ac2ad4c8c4 100644 --- a/src/worker/jobs/rss/sync_crates_feed.rs +++ b/src/worker/jobs/rss/sync_crates_feed.rs @@ -125,10 +125,6 @@ impl NewCrate { permalink: true, }; - let description = self - .description - .map(|d| quick_xml::escape::escape(&d).to_string()); - let name_extension = rss::extension::Extension { name: "crates:name".into(), value: Some(self.name), @@ -144,7 +140,7 @@ impl NewCrate { guid: Some(guid), title: Some(title), link: Some(link), - description, + description: self.description, pub_date: Some(pub_date), extensions, ..Default::default() diff --git a/src/worker/jobs/rss/sync_updates_feed.rs b/src/worker/jobs/rss/sync_updates_feed.rs index fbf63f2b5b2..6fd37ab1343 100644 --- a/src/worker/jobs/rss/sync_updates_feed.rs +++ b/src/worker/jobs/rss/sync_updates_feed.rs @@ -132,10 +132,6 @@ impl VersionUpdate { permalink: true, }; - let description = self - .description - .map(|d| quick_xml::escape::escape(&d).to_string()); - let name_extension = rss::extension::Extension { name: "crates:name".into(), value: Some(self.name), @@ -160,7 +156,7 @@ impl VersionUpdate { guid: Some(guid), title: Some(title), link: Some(link), - description, + description: self.description, pub_date: Some(pub_date), extensions, ..Default::default() From 6154581a9032c95f7e7f6d8838ca5514d94004f3 Mon Sep 17 00:00:00 2001 From: Tobias Bieniek Date: Sun, 17 Nov 2024 09:11:17 +0100 Subject: [PATCH 2/2] tests/worker/rss: Work around broken `]]>` escaping --- ...__worker__rss__sync_crates_feed__sync_crates_feed-2.snap | 2 +- ...worker__rss__sync_updates_feed__sync_updates_feed-2.snap | 2 +- src/tests/worker/rss/sync_crates_feed.rs | 2 +- src/tests/worker/rss/sync_updates_feed.rs | 2 +- src/worker/jobs/rss/sync_crates_feed.rs | 6 +++++- src/worker/jobs/rss/sync_updates_feed.rs | 6 +++++- 6 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_crates_feed__sync_crates_feed-2.snap b/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_crates_feed__sync_crates_feed-2.snap index 616fd59e19d..301ccbfbb62 100644 --- a/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_crates_feed__sync_crates_feed-2.snap +++ b/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_crates_feed__sync_crates_feed-2.snap @@ -21,7 +21,7 @@ snapshot_kind: text New crate created: baz https://crates.io/crates/baz - ]]> + ]]]]>]]> https://crates.io/crates/baz Fri, 21 Jun 2024 17:01:33 +0000 baz diff --git a/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_updates_feed__sync_updates_feed-2.snap b/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_updates_feed__sync_updates_feed-2.snap index a9025763c39..9c934ded17c 100644 --- a/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_updates_feed__sync_updates_feed-2.snap +++ b/src/tests/worker/rss/snapshots/crates_io__tests__worker__rss__sync_updates_feed__sync_updates_feed-2.snap @@ -30,7 +30,7 @@ snapshot_kind: text New crate version published: bar v3.0.0-beta.1 https://crates.io/crates/bar/3.0.0-beta.1 - ]]> + ]]]]>]]> https://crates.io/crates/bar/3.0.0-beta.1 Fri, 21 Jun 2024 17:03:45 +0000 bar diff --git a/src/tests/worker/rss/sync_crates_feed.rs b/src/tests/worker/rss/sync_crates_feed.rs index baeff61554d..928175a631b 100644 --- a/src/tests/worker/rss/sync_crates_feed.rs +++ b/src/tests/worker/rss/sync_crates_feed.rs @@ -15,7 +15,7 @@ async fn test_sync_crates_feed() { let description = Some("something something foo"); create_crate(&mut conn, "foo", description, "2024-06-20T10:13:54Z").await; create_crate(&mut conn, "bar", None, "2024-06-20T12:45:12Z").await; - let description = Some("does it handle XML? "); + let description = Some("does it handle XML? ]]>"); create_crate(&mut conn, "baz", description, "2024-06-21T17:01:33Z").await; create_crate(&mut conn, "quux", None, "2024-06-21T17:03:45Z").await; diff --git a/src/tests/worker/rss/sync_updates_feed.rs b/src/tests/worker/rss/sync_updates_feed.rs index c653d33b7cb..87ae9a5e91e 100644 --- a/src/tests/worker/rss/sync_updates_feed.rs +++ b/src/tests/worker/rss/sync_updates_feed.rs @@ -12,7 +12,7 @@ async fn test_sync_updates_feed() { let (app, _) = TestApp::full().empty(); let mut conn = app.async_db_conn().await; - let d = Some("let's try & break this "); + let d = Some("let's try & break this ]]>"); create_version(&mut conn, "foo", "0.1.0", None, "2024-06-20T10:13:54Z").await; create_version(&mut conn, "foo", "0.1.1", None, "2024-06-20T12:45:12Z").await; diff --git a/src/worker/jobs/rss/sync_crates_feed.rs b/src/worker/jobs/rss/sync_crates_feed.rs index 1ac2ad4c8c4..de28909f53a 100644 --- a/src/worker/jobs/rss/sync_crates_feed.rs +++ b/src/worker/jobs/rss/sync_crates_feed.rs @@ -125,6 +125,10 @@ impl NewCrate { permalink: true, }; + let description = self + .description + .map(|d| d.replace("]]>", "]]]]>")); + let name_extension = rss::extension::Extension { name: "crates:name".into(), value: Some(self.name), @@ -140,7 +144,7 @@ impl NewCrate { guid: Some(guid), title: Some(title), link: Some(link), - description: self.description, + description, pub_date: Some(pub_date), extensions, ..Default::default() diff --git a/src/worker/jobs/rss/sync_updates_feed.rs b/src/worker/jobs/rss/sync_updates_feed.rs index 6fd37ab1343..3a817f732f8 100644 --- a/src/worker/jobs/rss/sync_updates_feed.rs +++ b/src/worker/jobs/rss/sync_updates_feed.rs @@ -132,6 +132,10 @@ impl VersionUpdate { permalink: true, }; + let description = self + .description + .map(|d| d.replace("]]>", "]]]]>")); + let name_extension = rss::extension::Extension { name: "crates:name".into(), value: Some(self.name), @@ -156,7 +160,7 @@ impl VersionUpdate { guid: Some(guid), title: Some(title), link: Some(link), - description: self.description, + description, pub_date: Some(pub_date), extensions, ..Default::default()