Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .repository-projection.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
"projection": "deixic-code",
"projectionSchemaVersion": 1,
"sourceRepository": "dx-corp/mono",
"sourceSha": "aa976f3d57658df7f0804227bb70e99e317ab2c1",
"sourceSha": "a69c1b529a97b14a03400ba6da3c7638e731bed7",
"destinationRepository": "dx-corp/code",
"priorProjectedBase": "d2b2b4dbd91eb9443b760e8f0480a4413ff81b46",
"priorProjectedBase": "b559b7489e7be5106525ee575859f5ddef1f21d8",
"definitionDigest": "cb9d429542ebb0a2de9b42a7aad60d9d8696a648ceba47c30f05c0b285ca0db7",
"toolDigest": "f8cb071b0f27267120ccf45a00d0982f45113bd23535bef6a1555b4933f99f13",
"contentDigest": "4676d676f45ea745c21a6ebb2d20aedcf3d83bcf978ca61d2f303c5ca4a09c82",
Expand Down
99 changes: 99 additions & 0 deletions vendor/codemode-provenance.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
[
{
"archive_files_sha256": {
".cargo_vcs_info.json": "f03df2fac8642e82b6a3722802afa836c46d19ad317b669aad3311a12f20f0a7",
"Cargo.lock": "e0ad8a233cb652d36eb1e9c65845b9b2b24da80cb62f169c96babe893862453c",
"Cargo.toml": "2a876598dfdae3b57cd230fbacc08e964aaf896e85482f43857e439b705a2c01",
"Cargo.toml.orig": "65bfd4a89def9cb53c31fe6c40df23500db1e0ba45bcd117eb0f409cc612775c",
"README.md": "6ed3f903edad2a16c871baf0e2ce13d80a317e4147b9553e5bf186955a4231f5",
"src/allocator.rs": "301baa03e63c247b710e3359bfed959195e0649214d0f650b6901d7bc83f88c0",
"src/allocator/rust.rs": "15243e4e4eff57237553f814cf8f9f373466ae42fe6252223a460dc34c4d9dd8",
"src/class.rs": "9558392d052586b9984c71b285d046f16149bad0583d3c454ec7b9ec2a5fda56",
"src/class/cell.rs": "ae3204e96cd201451e4050e418b7df3f2e2f6fc75a5fe3550ec8203ebeb4d21b",
"src/class/ffi.rs": "9b3bb35e502a091c4510964721781d1256916a008a6cedacb014d9ba1fc4d8ed",
"src/class/impl_.rs": "608875a4b43b277d3bed87d98173b03b548b008979d89ffc3ffb3be659280ea5",
"src/class/trace.rs": "a1594bc9e4b0e581c13ffae9a5af715da750ab4a96d73976532e540c51556031",
"src/context.rs": "f7b069a5741975467caaf8f2a46ae4aa620ed3bd2ecf0814b343cbf5064d6798",
"src/context/async.rs": "0e061f70ad266dc4512c4fe688b6f26ffaa6ef77b8f3ce037d38a014da138728",
"src/context/async/future.rs": "093b2ed761eabd0d5104c96c3cd95bcc477474092b947f60e49fe6feb5523193",
"src/context/base.rs": "c5049fd11c92e56f602c4baf4c3b7a666b0b5623c5c03c546335984bc1a94fb5",
"src/context/builder.rs": "200cb0a5955828e74698d9955da2299ea89bc9864dde5df65f28b0cfc45e68f4",
"src/context/ctx.rs": "a9c71df2fb0cec3e053db18cf20ff65598193b4dcc66434e54666ebd09749003",
"src/context/multi_with_impl.rs": "4a5b9b90bad3a424a7501fdd7433b3c8a862620bfb776bfce3f3ed1d99f6f04a",
"src/context/owner.rs": "2a71c53639ebdf39fc0869ff23877c541581fe632e742a57cbb683fabdf37e81",
"src/js_lifetime.rs": "06f4925dd9a9ac2876993bb66123342d9fca596f61a71861dfbbcc78a7066fb9",
"src/lib.rs": "edef197427c18c7a60e66ec77dae893461e4da15236b7da67af4f65f7e7bf580",
"src/loader.rs": "02c1174843e6f27da8c3c76d6119a751804d9f83e2ff08ab050fca8fe5888b61",
"src/loader/builtin_loader.rs": "88dc50a90cc61f604865e29f4e9b4e5127615127d8a55eb87a5c789f48e499e1",
"src/loader/builtin_resolver.rs": "0368254d46e18bdaf5a3209be49497b674fd9a45718ba07b0d6137f4f016f249",
"src/loader/bundle.rs": "ff9bb1174d51db50f949486ded577cf07ae373312f4ee999b8d0e88a1de5519b",
"src/loader/compile.rs": "0190669255458e1669a98f48a18e4ff3a56f0af70b8fa00aea259cdf04ea32d2",
"src/loader/file_resolver.rs": "6ade41db474a91c8b92e3d6f9904fb2ad380066bdee0e0693fedfe57359ae860",
"src/loader/module_loader.rs": "f77d2b996592894c5456d4cfd0d865df1e4e3e6ad944dd9c61e8a7178f37d0aa",
"src/loader/native_loader.rs": "b877e5cce97b36d7e58a68449d39010ce0b5ace62bc4b7059d6998e2eba09c81",
"src/loader/script_loader.rs": "6980215683b3c2fc31ffec0f9bc42e4af1569a1abda16524f31e9ddc9ea24d76",
"src/loader/util.rs": "78c45bd8d20504f1de80597ee6305beae03ff7cb2f73ded9115dfe4a4fbfab4b",
"src/markers.rs": "0d3c665cc024313df4db41483e114fcbb36d6602bb880eeb9d4f7de37ec444bf",
"src/persistent.rs": "facd167ef7ddb838d56c1dd099677d9d9d36a22120b0dabfbfa05417f3be8b78",
"src/result.rs": "65377537f86dfabe7a77c0bdab6143aebf3cb4decebb81be4dcd547290b7ba0e",
"src/runtime.rs": "0a51347ad3b91fd18ca4c3fa6993f3487ea9158577698fae96344271c2622799",
"src/runtime/async.rs": "9a68ba07e8b90bba323fa643db4fcadbe3e4fb87d1a3e082bc97cc0a97e45dbc",
"src/runtime/base.rs": "1e5c5e85453096e647867d3978a03298614fa609c243f90270a339c000ae399c",
"src/runtime/exotic.rs": "767d55139ae206a452e779c8770f2d1f4d0de2f75e3be63026169cf959ff9628",
"src/runtime/opaque.rs": "b21fca9233686abadb65fa488c7e5d9043020e38cf728a83f88d112d7714c08c",
"src/runtime/raw.rs": "e7f70ab2752c2c91fcd36474d326fc24b3e4fd7c346dcc52a01673abb3eb36eb",
"src/runtime/schedular.rs": "f19b1f1d2acb5d672c93ea58512cdcc60b3f7ec1e7ede766b680eedcb8034566",
"src/runtime/schedular/atomic_waker.rs": "204e112674416114f52bd7c676a1c032f2f42dec9877ff22a929456ddf9fa74e",
"src/runtime/schedular/queue.rs": "9d0708700e039e84d5d06d50dae68c0ed60fee47377363f21084b165f7c2da46",
"src/runtime/schedular/task.rs": "2518021fef7268d21531b33cc7f5a644be64daccf6a8d0df720be06934b10206",
"src/runtime/schedular/vtable.rs": "eae72a12b25d5aa52ae4d440fe23df34e794c9438d69fbfb988513ccfe277a6d",
"src/runtime/schedular/waker.rs": "ad9586704aaf21851c9bb9e7d4d48f86e66ca15a949ce8d3027e5298a7e49096",
"src/runtime/spawner.rs": "a0dfa8a5ec6e21d6ab9ee5da4dd8798bef6664634f760c3a2576c6140851a258",
"src/runtime/userdata.rs": "52d3d5111a24c922aabff03de4d07c8e52843e007d718893c693e87a6f533937",
"src/safe_ref.rs": "f94ca7c42f20257348d92db7900e0b42e6119064d725d47312e9d57843dbc1b3",
"src/util.rs": "bd97d25dbcb303dfe820f3b1d221e063d5dbbb6e51488347d5bc9c6573012eed",
"src/value.rs": "01ac5d735a36298de881afe731c249ba50f240adda3dd6689c59620b7bb581c1",
"src/value/array.rs": "17760377055733f77abfbe2d056b92bf63c01aa95819f47481431a40cfff5d8c",
"src/value/array_buffer.rs": "62a4d82adf005bcb40d50e299466c5d0a96f987b14ef67ac61ad34743355c85c",
"src/value/atom.rs": "d83ba99326c893dbb531d9ec11c30e045f469ebe5a8d321be458654cd4dcd32c",
"src/value/atom/predefined.rs": "44d54dd94951d59af6617711b5419747810741854f4d9e5c26984fe99be71e37",
"src/value/bigint.rs": "f405d82351c4073433bcb938d195db231e66984d21289170b699c96d44b42587",
"src/value/convert.rs": "909d201564711823cedb77a2c7b511cc1edc17bbb52600475f0dcc25294c04ab",
"src/value/convert/atom.rs": "4dd356f2cbd1f8bf53e55c7d35d23b8541500f74f08324681cf211064b0b5fc1",
"src/value/convert/coerce.rs": "f761b53f1b30a395c5803ee85513acb82e8a28b9dd4710f8129ad4d6f50cbbbc",
"src/value/convert/from.rs": "dfb07cd95646821420e39648b6289716252c3f52e245d4c4db91e2776b0f4f50",
"src/value/convert/into.rs": "a8742102fdba459a4c0709baabe91c3aa8685e6892ef5e444696db91d54f8b96",
"src/value/exception.rs": "272b07e443bfa7d92e4b885abcbc92629a439ae15dd20780863432a3d1d614f7",
"src/value/function.rs": "186099d97cd2a3701c45bea43b38a290c63289590363fcc83207f60a62569ec3",
"src/value/function/args.rs": "41d23a2b2a319cad3f9e43dc9cf70b15ea0cd83324f4347ef914b17abde76082",
"src/value/function/ffi.rs": "c0c29010ca451433406322761da94b0c862bf01c49b0f748a3121e71824e332e",
"src/value/function/into_func.rs": "0971639e94816462a56be381ba106284e1ceb27ed5f3f27c69e6811713a0a9bc",
"src/value/function/params.rs": "a495be67ef9c29292fbe7e7d04a6b675f636ffdfe4551f4e99b65c7e0b6bb44e",
"src/value/function/types.rs": "9e19dfcdaeb19bedbc93714d6145b8805acdb51b51abb245f6da93308c5e2ae8",
"src/value/iterable.rs": "cd2891d6dddf014663167371c2eed3588a44f8466434d77260c7de70f0ef4531",
"src/value/module.rs": "ca512e6669f55c705648885e53982f4c7f8798aef5af35bb97a8a57939f60f6d",
"src/value/object.rs": "1b5ab8f7106d4276ac9823d91519fcd28fe36f215eb82e6fb39a2f5db842704a",
"src/value/object/property.rs": "7001ca4dd609720b4d7e872ef88e3a225eb3fff2504c8f48d3cf33c0a04393f5",
"src/value/promise.rs": "eee35c3723e917e86dab01bdd51d7f88a9f6e3813008c54fb5542d39e8e5fa6f",
"src/value/proxy.rs": "6cb8942b371ca2f8c616463761aabb6b69035f460891aaf3fb3aeabf7a63a302",
"src/value/proxy/handler.rs": "7c30f54a60bdc24a0899d661317f68c5524523b3ae1e6b4ab1f1843273308ccf",
"src/value/string.rs": "ef82ed01c948e028ffaea2d37bc29c42677ee2c203244f9980526a060592202b",
"src/value/symbol.rs": "c6e67505bfd7286d3a36b34a1b7672b21616acc2f619802ff7d55e5451ec9e5e",
"src/value/typed_array.rs": "8c665a13bc8027993409063000f2a040a363515b7a8d8dc017241f36f6e887fb"
},
"archive_sha256": "7c6dbfedfbf458dc119c21ccd032c7527d185210b11a1ae796cd04106e6db280",
"crate": "rquickjs-core",
"omitted_archive_files": [
"Cargo.lock"
],
"patch": "rquickjs-core-0.13.0.patch",
"patch_sha256": "fb7b55eb61d1fd5dba155e0c921ffefe7eb2a008d138f4bd2db575999bd05787",
"path": "rquickjs-core-0.13.0",
"version": "0.13.0",
"workspaces": [
"rust",
"products/maestro",
"tests/business-objects-integration"
]
}
]
151 changes: 151 additions & 0 deletions vendor/email-encoding-0.4.2.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
diff --git a/src/headers/rfc2231.rs b/src/headers/rfc2231.rs
--- a/src/headers/rfc2231.rs
+++ b/src/headers/rfc2231.rs
@@ -7,6 +7,9 @@
use super::{MAX_LINE_LEN, hex_encoding, utils, writer::EmailWriter};

/// Encode a string via RFC 2231.
+///
+/// Returns an error if the writer fails or a continuation cannot consume
+/// any more of the value within the line limit. Output may be partial on error.
///
/// # Examples
///
@@ -74,8 +77,16 @@
if utils::str_is_ascii_printable(value) {
// Can be written normally (Parameter Value Continuations)

- let quoted_plain_combined_len = key.len() + "=\"".len() + value.len() + "\"\r\n".len();
- if w.line_len() + quoted_plain_combined_len <= MAX_LINE_LEN {
+ let quoted_plain_combined_len = key
+ .len()
+ .checked_add(value.len())
+ .and_then(|len| len.checked_add("=\"".len() + "\"\r\n".len()))
+ .ok_or(fmt::Error)?;
+ if w.line_len()
+ .checked_add(quoted_plain_combined_len)
+ .ok_or(fmt::Error)?
+ <= MAX_LINE_LEN
+ {
// Fits line

w.write_str(key)?;
@@ -95,10 +106,16 @@
loop {
write!(w, " {}*{}=\"", key, i)?;

- let remaining_len = MAX_LINE_LEN - w.line_len() - "\"\r\n".len();
+ let remaining_len = MAX_LINE_LEN
+ .checked_sub(w.line_len())
+ .and_then(|len| len.checked_sub("\"\r\n".len()))
+ .ok_or(fmt::Error)?;

let value_ =
utils::truncate_to_char_boundary(value, remaining_len.min(value.len()));
+ if value_.is_empty() && !value.is_empty() {
+ return Err(fmt::Error);
+ }
value = &value[value_.len()..];

utils::write_escaped(value_, w)?;
@@ -131,6 +148,7 @@
w.write_str("utf-8''")?;
}

+ let value_len = value.len();
let mut chars = value.chars();
while w.line_len() < MAX_LINE_LEN - "=xx=xx=xx=xx;\r\n".len() {
match chars.next() {
@@ -148,6 +166,9 @@
// End of value
break;
}
+ if value.len() == value_len {
+ return Err(fmt::Error);
+ }

// End of line
w.write_char(';')?;
@@ -167,6 +188,82 @@
use pretty_assertions::assert_eq;

use super::*;
+
+ // Count output without retaining it, and stop a broken encoder safely.
+ struct BudgetWriter {
+ remaining: usize,
+ exhausted: bool,
+ }
+
+ impl Write for BudgetWriter {
+ fn write_str(&mut self, value: &str) -> fmt::Result {
+ if value.len() > self.remaining {
+ self.exhausted = true;
+ return Err(fmt::Error);
+ }
+ self.remaining -= value.len();
+ Ok(())
+ }
+ }
+
+ #[test]
+ fn long_key_unicode_fails_before_exhausting_writer() {
+ for key_len in 49..=62 {
+ let key = "a".repeat(key_len);
+ for value in ["é", "📕", "aé"] {
+ let mut sink = BudgetWriter {
+ remaining: 16_384,
+ exhausted: false,
+ };
+ let result = {
+ let mut w = EmailWriter::new(&mut sink, 0, 0, false);
+ encode(&key, value, &mut w)
+ };
+ assert!(result.is_err(), "key length {key_len}, value {value}");
+ assert!(!sink.exhausted, "key length {key_len}, value {value}");
+ }
+ }
+ }
+
+ #[test]
+ fn long_key_plain_fails_before_exhausting_writer() {
+ let key = "a".repeat(62);
+ // The first million segments consume 1,111,110 bytes. The next
+ // segment number leaves no space for the last byte of the value.
+ let value = "a".repeat(1_111_111);
+ let mut sink = BudgetWriter {
+ remaining: 128 * 1024 * 1024,
+ exhausted: false,
+ };
+ let result = {
+ let mut w = EmailWriter::new(&mut sink, 0, 0, false);
+ encode(&key, &value, &mut w)
+ };
+ assert!(result.is_err());
+ assert!(!sink.exhausted);
+ }
+
+ #[test]
+ fn line_length_overflow_returns_error() {
+ let mut output = String::new();
+ let result = {
+ let mut w = EmailWriter::new(&mut output, usize::MAX, 0, false);
+ encode("filename", "duck.txt", &mut w)
+ };
+ assert!(result.is_err());
+ assert!(output.is_empty());
+ }
+
+ #[test]
+ fn longest_unicode_key_with_room_encodes_value() {
+ let key = "a".repeat(48);
+ let mut output = String::new();
+ {
+ let mut w = EmailWriter::new(&mut output, 0, 0, false);
+ encode(&key, "📕", &mut w).unwrap();
+ }
+ assert_eq!(output, alloc::format!("\r\n {key}*0*=utf-8''%F0%9F%93%95"));
+ }

#[test]
fn empty() {
6 changes: 6 additions & 0 deletions vendor/email-encoding-0.4.2/.cargo_vcs_info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"git": {
"sha1": "ae49096e1279e5d7207b70f7f2d690a44403b5bf"
},
"path_in_vcs": ""
}
90 changes: 90 additions & 0 deletions vendor/email-encoding-0.4.2/.github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
name: CI

on: [push, pull_request]

jobs:
fmt:
name: rustfmt / stable
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v7

- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt

- name: Rust rustfmt
run: cargo fmt --all -- --check

clippy:
name: clippy / stable
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v7

- uses: dtolnay/rust-toolchain@stable
with:
components: clippy

- name: Run clippy
run: cargo clippy -- -D warnings

test:
name: test / ${{ matrix.name }}
runs-on: ubuntu-latest

strategy:
matrix:
include:
- name: stable
rust: stable
- name: beta
rust: beta
- name: nightly
rust: nightly
- name: 1.85.0
rust: 1.85.0

steps:
- uses: actions/checkout@v7

- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}

- name: Run tests
run: cargo test

- name: Run no_std tests
run: cargo test --no-default-features

coverage:
name: coverage / stable
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

- uses: dtolnay/rust-toolchain@stable

- name: Install cargo-tarpaulin
run: |
LINK="https://github.com/xd009642/tarpaulin/releases/download/0.35.2/cargo-tarpaulin-x86_64-unknown-linux-gnu.tar.gz"
curl -L --output tarpaulin.tar.gz "$LINK"
tar -xzvf tarpaulin.tar.gz
chmod +x cargo-tarpaulin

- name: Run cargo-tarpaulin
run: ./cargo-tarpaulin tarpaulin --out Xml

- name: Upload to codecov.io
uses: codecov/codecov-action@v5
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

- name: Archive code coverage results
uses: actions/upload-artifact@v7
with:
name: code-coverage-report
path: cobertura.xml
1 change: 1 addition & 0 deletions vendor/email-encoding-0.4.2/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/target
Loading
Loading